OpenVPN client-to-client

16

Saat menggunakan server OpenVPN TUN (layer 3) dengan client-to-clientdinonaktifkan, klien saya masih dapat berbicara satu sama lain.

Konfigurasi klien-ke-klien harus mencegah ini sesuai dengan dokumentasi:

Batalkan komentar dari klien-ke-klien jika Anda ingin menghubungkan klien untuk dapat saling menjangkau melalui VPN. Secara default, klien hanya akan dapat mencapai server.

Mengapa klien dapat terus berkomunikasi satu sama lain ketika opsi ini dinonaktifkan?

Ini adalah server saya 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
lobi
sumber

Jawaban:

54

Jika client-to-clientsudah diaktifkan , paket server VPN depan klien-ke-klien internal tanpa mengirim mereka ke lapisan IP dari host (yaitu untuk kernel). Tumpukan jaringan host tidak melihat paket-paket itu sama sekali.

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


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


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

Jika client-to-clientadalah dinonaktifkan , paket-paket dari klien ke klien lain melalui lapisan host IP (iptables, tabel routing, dll) dari mesin hosting server VPN: jika IP forwarding diaktifkan , tuan rumah mungkin meneruskan paket (menggunakan nya routing table) lagi ke antarmuka TUN dan daemon VPN akan meneruskan paket ke klien yang benar di dalam terowongan.

           .-------------------.
           | 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       |
 '----------------'  '----------------'

Dalam hal ini ( client-to-clientdinonaktifkan), Anda dapat memblokir paket klien-ke-klien menggunakan iptables:

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

di mana tun0antarmuka VPN Anda.

ysdx
sumber
Tandai ini sebagai jawabannya; ringkas namun sangat informatif dan benar-benar memberikan aturan firewall iptables dalam jawabannya.
lobi
1
Saya punya pertanyaan tentang diagram, apakah Anda menggambar char dengan char dan space by space? atau apakah Anda menggunakan aplikasi apa pun untuk membantu Anda mendapatkannya dengan mudah dan cepat?
Mohammed Noureldin
3
@MohammedNoureldin, saya membuat diagram asli dengan asciio ( search.cpan.org/dist/App-Asciio ) yang merupakan editor titik-dan-klik WYSWYG untuk diagram asciiart.
ysdx
Terima kasih, apakah Anda berhasil menjalankannya di windows? sepertinya ini adalah aplikasi dari abad pertengahan, dan saya tidak bisa menjalankannya di windows, saya mencoba menginstalnya dengan paket camelbox, tapi saya selalu mendapat error 404.
Mohammed Noureldin
2
@MohammedNoureldin, saya tidak menggunakan Windows. Saya menggunakan Debian dan itu langsung diinstal dari paket.
ysdx
5

Paragraf berikutnya dari halaman manual untuk openvpnmenjawab pertanyaan ini, meskipun belum tentu jelas pada bacaan pertama:

Karena mode server OpenVPN menangani banyak klien melalui antarmuka tun atau tap tunggal, maka secara efektif router. The --client-to-client flag mengatakan OpenVPN ke internal dengan klien-ke-klien lalu lintas daripada mendorong semua lalu lintas klien asal ke antarmuka TUN / TAP.

Ketika opsi ini digunakan, setiap klien akan "melihat" klien lain yang saat ini terhubung. Jika tidak, setiap klien hanya akan melihat server. Jangan gunakan opsi ini jika Anda ingin firewall lalu lintas terowongan menggunakan aturan kustom, per-klien.

The client-to-clientpilihan pendek-sirkuit tabel routing normal pada server. Menghapusnya tidak mencegah klien menggunakan tabel perutean server. Jika tabel-tabel routing - dan konfigurasi firewall server - memungkinkan klien untuk melihat satu sama lain maka mereka akan dapat melakukannya.

roaima
sumber
5

Anda perlu melakukan lebih dari sekadar mengomentari arahan seperti yang tertulis di sini :

Batalkan komentar pada arahan ini untuk memungkinkan klien yang berbeda dapat "melihat" satu sama lain. Secara default, klien hanya akan melihat server. Untuk memaksa klien hanya melihat server, Anda juga perlu firewall antarmuka TUN / TAP server.

Oleh karena itu Anda dapat mengkonfigurasi kebijakan alamat IP terpisah untuk setiap klien. Lihat bagian Mengkonfigurasi aturan khusus klien dan kebijakan akses di sini: https://openvpn.net/index.php/open-source/documentation/howto.html . dan di sini: https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client .

Diamant
sumber
Maka ini berarti apa yang saya pikirkan: satu-satunya cara untuk mencapai ini adalah menempatkan setiap klien pada subnet yang berbeda. Ini sebagian besar menjawab pertanyaan, ditambah Anda memberikan beberapa dokumentasi tentang bagaimana melakukannya. Saya akan menandai ini sebagai jawabannya. Terima kasih.
lobi