Khởi chạy OpenVPN trong Docker sau 2 giây

Xin chào cư dân Khabrovsk! Bạn đã bao giờ gặp phải tình huống khi bạn thực sự muốn được chuyển đến một thành phố, quốc gia hoặc lục địa khác chưa? Tôi có nhu cầu này khá thường xuyên, vì vậy cơ hội có máy chủ VPN của riêng mình, có thể khởi chạy ở bất cứ đâu, trong vài giây, là khá cấp thiết. đang tìm kiếm một giải pháp làm sẵn, trong trường hợp này là Docker một hình ảnh cho phép bạn nhanh chóng thiết lập máy chủ OpenVPN, với các cài đặt tối thiểu và mức độ bảo mật có thể chấp nhận được.

Khởi chạy OpenVPN trong Docker sau 2 giây

thời tiền sử

Khả năng chạy dịch vụ trên bất kỳ máy nào - có thể là máy chủ vật lý, máy chủ riêng ảo hoặc thậm chí là vùng chứa bên trong hệ thống quản lý vùng chứa khác - là rất quan trọng. Ánh mắt của tôi ngay lập tức đổ dồn vào Docker. Thứ nhất, dịch vụ này đang trở nên phổ biến và do đó ngày càng có nhiều nhà cung cấp cung cấp các giải pháp cài đặt sẵn; thứ hai, có một kho lưu trữ hình ảnh tập trung từ đó bạn có thể tải xuống và chạy dịch vụ bằng một lệnh trong thiết bị đầu cuối. Ý tưởng rằng một dự án như vậy lẽ ra phải tồn tại đã đến với tôi và tôi đã tìm kiếm rất kỹ. Nhưng hầu hết các dự án mà tôi tìm thấy đều quá cồng kềnh (bạn phải tạo một vùng chứa để lưu trữ dữ liệu vĩnh viễn và khởi chạy vùng chứa ứng dụng nhiều lần với các tham số khác nhau) hoặc không có tài liệu lành mạnh hoặc bị bỏ hoàn toàn. , Tôi đã bắt đầu làm việc với dự án của bạn. Có những đêm mất ngủ trước khi nghiên cứu tài liệu, viết mã và gỡ lỗi, nhưng cuối cùng dịch vụ của tôi đã nhìn thấy ánh sáng ban ngày và bắt đầu lấp lánh với đủ màu sắc của bảng đèn LED đơn sắc của bộ định tuyến. Vì vậy, tôi yêu cầu bạn yêu thương và ưu ái - Docker-OpenVPN. Tôi thậm chí còn nghĩ ra cả logo (ở trên, trước khi cắt) nhưng không đánh giá nó một cách khắt khe, vì tôi không phải là nhà thiết kế (nữa). Khi triển khai dự án này, tôi ưu tiên tốc độ triển khai, tối thiểu là cài đặt và mức độ bảo mật có thể chấp nhận được. Qua thử và sai, tôi đã tìm thấy sự cân bằng tối ưu của các tiêu chí này, tuy nhiên, ở một số nơi, tôi phải hy sinh tốc độ triển khai vì lý do bảo mật và đối với các cài đặt tối thiểu, tôi phải trả tiền cho tính di động: trong cấu hình hiện tại, một vùng chứa sau khi được tạo trên một máy chủ không thể được chuyển và khởi chạy trên máy chủ khác. Ví dụ: tất cả chứng chỉ máy khách và máy chủ được tạo khi dịch vụ khởi động và quá trình này sẽ mất khoảng 2 giây. Tuy nhiên, việc tạo tệp Hellman Defi phải được tính vào thời gian xây dựng: nó được tạo trong quá trình xây dựng hình ảnh docker và có thể kéo dài tới 10 phút. Tôi thực sự muốn nhận được đánh giá bảo mật về giải pháp như vậy từ cộng đồng được tôn trọng.

Ra mắt

Để bắt đầu dịch vụ, chúng tôi cần một số thứ:

  1. Máy chủ: vật lý hoặc ảo. Về mặt lý thuyết có thể chạy ở chế độ docker-within-docker, nhưng tôi chưa thử nghiệm rộng rãi tùy chọn này;
  2. Trên thực tế Docker. Nhiều nhà cung cấp dịch vụ lưu trữ cung cấp các giải pháp làm sẵn có Docker;
  3. Địa chỉ IP công cộng.

Nếu tất cả các chi tiết đã sẵn sàng thì tất cả những gì chúng ta phải làm là chạy lệnh sau trong bảng điều khiển trên máy chủ của bạn:

docker run --cap-add=NET_ADMIN 
-it -p 1194:1194/udp -p 80:8080/tcp 
-e HOST_ADDR=$(curl -s https://api.ipify.org) 
alekslitvinenk/openvpn

Một người đọc chú ý có thể nhận thấy rằng địa chỉ IP của máy chủ được xác định tự động bằng cách sử dụng ipify.org. Nếu vì lý do nào đó điều này không hiệu quả, thì bạn có thể chỉ định địa chỉ theo cách thủ công. Nếu tất cả các bước trước đó được hoàn thành chính xác, thì chúng ta sẽ thấy điều gì đó tương tự trong bảng điều khiển:

Sun Jun  9 08:56:11 2019 Initialization Sequence Completed
Sun Jun  9 08:56:12 2019 Client.ovpn file has been generated
Sun Jun  9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com/
Sun Jun  9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down!

Chúng ta đã gần đạt được mục tiêu: bây giờ chúng ta cần sao chép example.com (trong trường hợp của bạn, đó sẽ là địa chỉ máy chủ của bạn) và dán nó vào thanh địa chỉ của trình duyệt. Sau khi bạn nhấn Enter, tệp client.ovpn sẽ được tải xuống và chính máy chủ http sẽ biến mất vào quên lãng. Nếu giải pháp này bị nghi ngờ, bạn có thể sử dụng thủ thuật sau: chạy lệnh trước đó và thêm cờ zp và mật khẩu. Bây giờ, nếu bạn dán liên kết đã tạo vào cửa sổ trình duyệt, bạn sẽ nhận được một kho lưu trữ zip có mật khẩu. Sau khi có tệp cấu hình máy khách, bạn có thể sử dụng bất kỳ ứng dụng khách phù hợp nào. Tôi sử dụng Tunnelblick cho Mac.

Video hướng dẫn

Video hướng dẫn này chứa các hướng dẫn chi tiết để triển khai dịch vụ trên DigitalOcean.

PS Nếu bạn thấy dự án này hữu ích, vui lòng đánh dấu sao cho nó trên GitHub, phân nhánh nó và giới thiệu với bạn bè của bạn. Những người đóng góp và kiểm tra bảo mật cũng được hoan nghênh rộng rãi.PPS Nếu bài viết này kết thúc trên Habr, thì tôi dự định viết bài tiếp theo về cách tôi khởi chạy docker-in-docker và docker-in-docker-in-docker, tại sao tôi làm điều đó và kết quả của nó.
EDIT1:

  1. Đã sửa lỗi trong ấn phẩm,
  2. Trả lời các bình luận, tôi quyết định đưa thông tin này vào đây: cờ —privileged là cần thiết để hoạt động với iptables

EDIT2:

  1. Đã cải thiện lệnh khởi chạy hình ảnh: bây giờ nó không yêu cầu cờ –privileged
  2. Đã thêm liên kết vào video hướng dẫn bằng tiếng Nga: youtube.be/A8zvrHsT9A0

Nguồn: www.habr.com

Thêm một lời nhận xét