OpenVPN client-to-client


16

Khi sử dụng máy chủ OpenVPN TUN (lớp 3) client-to-clientbị vô hiệu hóa, các máy khách của tôi vẫn có thể nói chuyện với nhau.

Cấu hình client-to-client sẽ ngăn điều này theo tài liệu:

Bỏ ghi chú chỉ thị từ máy khách đến máy khách nếu bạn muốn kết nối máy khách để có thể liên lạc với nhau qua VPN. Theo mặc định, khách hàng sẽ chỉ có thể truy cập máy chủ.

Tại sao các máy khách có thể tiếp tục liên lạc với nhau khi tùy chọn này bị tắt?

Đây là máy chủ của tôi conf:

port 443
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh4096.pem
topology subnet
server 10.10.201.0 255.255.255.128
ifconfig-pool-persist ipp.txt
crl-verify /etc/openvpn/keys/crl.pem
push "route [omitted]"
push "dhcp-option DNS [omitted]"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
cipher AES-256-CBC
tls-auth /etc/openvpn/keys/pfs.key 0
verb 4

Câu trả lời:


54

Nếu client-to-clientđược bật , máy chủ VPN sẽ chuyển tiếp các gói máy khách sang máy khách bên trong mà không gửi chúng đến lớp IP của máy chủ (tức là đến kernel). Ngăn xếp mạng máy chủ hoàn toàn không thấy các gói đó.

           .-------------------.
           | IP Layer          |
           '-------------------'


           .-------------------.
           | TUN device (tun0) |
           '-------------------'


           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  2   
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

Nếu client-to-clientngười khuyết tật , các gói dữ liệu từ một khách hàng cho khách hàng khác đi qua các lớp IP máy chủ (iptables, bảng, vv routing) của máy lưu trữ máy chủ VPN: nếu IP chuyển tiếp được kích hoạt , tổ chức có thể chuyển tiếp các gói tin (sử dụng của nó bảng định tuyến) một lần nữa vào giao diện TUN và trình nền VPN sẽ chuyển tiếp gói đến đúng máy khách bên trong đường hầm.

           .-------------------.
           | IP Layer          |  (4) routing, firewall, NAT, etc.
           '-------------------'      (iptables, nftables, conntrack, tc, etc.)
              ^          |
          3   |          |  5
              |          v
           .-------------------.
           | TUN device (tun0) |
           '-------------------'
             ^           |
          2  |           |  6  
             |           v
           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  7  
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

Trong trường hợp này ( client-to-clientbị vô hiệu hóa), bạn có thể chặn các gói máy khách đến máy khách bằng cách sử dụng iptables:

 iptables -A FORWARD -i tun0 -o tun0 -j DROP

tun0giao diện VPN của bạn ở đâu


Đánh dấu đây là câu trả lời; súc tích nhưng rất nhiều thông tin và thực sự cung cấp quy tắc tường lửa iptables trong câu trả lời.
lobi

1
Tôi có một câu hỏi về sơ đồ, bạn có vẽ nó bằng char và không gian theo không gian không? hoặc bạn có sử dụng bất kỳ ứng dụng nào để giúp bạn có được điều đó một cách đơn giản và nhanh chóng không?
Mohammed Noureldin

3
@MohammedNoureldin, tôi đã tạo sơ đồ ban đầu với asciio ( search.cpan.org/dist/App-Asciio ) là trình chỉnh sửa điểm và nhấp chuột của WYSWYG cho sơ đồ asciiart.
ysdx

Cảm ơn bạn, bạn đã quản lý để chạy nó trên windows? nó dường như là một ứng dụng từ thời trung cổ và tôi không thể chạy nó trên windows, tôi đã cố gắng cài đặt nó với gói camelbox, nhưng tôi luôn gặp lỗi 404.
Mohammed Noureldin

2
@MohammedNoureldin, tôi không sử dụng Windows. Tôi đang sử dụng Debian và nó có thể cài đặt được từ các gói.
ysdx

5

Đoạn tiếp theo của trang hướng dẫn openvpntrả lời câu hỏi này, mặc dù lần đầu tiên nó không nhất thiết phải rõ ràng:

Vì chế độ máy chủ OpenVPN xử lý nhiều máy khách thông qua một giao diện điều chỉnh hoặc chạm đơn, nên nó thực sự là một bộ định tuyến. Các --client-to-client lá cờ nói với OpenVPN để nội tuyến đường client-to-client giao thông chứ không phải là đẩy tất cả lưu lượng khách hàng có xuất xứ đối với giao diện TUN / TAP.

Khi tùy chọn này được sử dụng, mỗi máy khách sẽ "nhìn thấy" các máy khách khác hiện đang được kết nối. Nếu không, mỗi khách hàng sẽ chỉ nhìn thấy máy chủ. Không sử dụng tùy chọn này nếu bạn muốn tường lửa lưu lượng truy cập đường hầm bằng cách sử dụng quy tắc tùy theo khách hàng.

Các client-to-clienttùy chọn ngắn mạch các bảng định tuyến bình thường trên máy chủ. Loại bỏ nó không ngăn các máy khách sử dụng các bảng định tuyến của máy chủ. Nếu các bảng định tuyến đó - và cấu hình tường lửa của máy chủ - cho phép các máy khách nhìn thấy nhau thì chúng sẽ có thể làm như vậy.


5

Bạn cần phải làm nhiều hơn là chỉ nhận xét chỉ thị như ở đây :

Không tuân theo chỉ thị này để cho phép các khách hàng khác nhau có thể "nhìn thấy" nhau. Theo mặc định, khách hàng sẽ chỉ nhìn thấy máy chủ. Để buộc khách hàng chỉ nhìn thấy máy chủ, bạn cũng cần tường lửa thích hợp giao diện TUN / TAP của máy chủ.

Do đó, bạn có thể định cấu hình chính sách địa chỉ IP riêng biệt cho từng khách hàng. Xem phần Định cấu hình quy tắc và chính sách truy cập dành riêng cho khách hàng tại đây: https://openvpn.net/index.php/open-source/documentation/howto.html . và tại đây: https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client .


Sau đó, điều này có nghĩa là những gì tôi nghĩ: cách duy nhất để đạt được điều này là đưa mỗi khách hàng vào các mạng con khác nhau. Điều này chủ yếu trả lời câu hỏi, cộng với bạn đã cung cấp một số tài liệu về cách làm điều đó. Tôi sẽ đánh dấu điều này là câu trả lời. Cảm ơn.
lobi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.