OpenVPN klient-klient

18

Kiedy korzystam z serwera OpenVPN TUN (warstwa 3) z client-to-clientwyłączonym, moi klienci nadal mogą ze sobą rozmawiać.

Konfiguracja klient-klient powinna temu zapobiec zgodnie z dokumentacją:

Odkomentuj dyrektywę klient-klient, jeśli chcesz, aby klienci łączący mogli się nawzajem kontaktować przez sieć VPN. Domyślnie klienci będą mogli uzyskać dostęp tylko do serwera.

Dlaczego klienci mogą nadal komunikować się ze sobą, gdy ta opcja jest wyłączona?

Oto moja konfiguracja serwera:

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
źródło

Odpowiedzi:

56

Jeśli client-to-clientta opcja jest włączona , serwer VPN przesyła pakiety klient-klient wewnętrznie bez wysyłania ich do warstwy IP hosta (tj. Do jądra). Stos sieci hosta w ogóle nie widzi tych pakietów.

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


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


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

Jeśli client-to-clientjest wyłączone , pakiety od klienta do innego klienta przechodzą przez warstwę IP hosta (iptables, tablica routingu itp.) Komputera obsługującego serwer VPN: jeśli przekazywanie IP jest włączone , host może przekazać pakiet (używając swojego tablica routingu) ponownie do interfejsu TUN, a demon VPN prześle pakiet do właściwego klienta w tunelu.

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

W takim przypadku ( client-to-clientwyłączone) możesz zablokować pakiety klient-klient za pomocą iptables:

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

gdzie tun0jest twój interfejs VPN.

ysdx
źródło
Oznaczono to jako odpowiedź; zwięzłe, ale bardzo pouczające i w rzeczywistości zawiera regułę zapory iptables w odpowiedzi.
lobi
1
Mam pytanie dotyczące diagramu, czy rysujesz go char po char, a spacja po spacji? czy korzystasz z dowolnej aplikacji, aby uzyskać to w prosty i szybki sposób?
Mohammed Noureldin
3
@MohammedNoureldin, stworzyłem oryginalny schemat za pomocą asciio ( search.cpan.org/dist/App-Asciio ), który jest edytorem WYSWYG typu „wskaż i kliknij” dla diagramów asciiart.
ysdx 17.07.17
Dziękujemy, czy udało Ci się uruchomić go w systemie Windows? wygląda na to, że jest to aplikacja ze średniowiecza i nie mogłem uruchomić jej w systemie Windows, próbowałem zainstalować ją z pakietem camelbox, ale zawsze pojawia się błąd 404.
Mohammed Noureldin
2
@MohammedNoureldin, nie używam systemu Windows. Używam Debiana i można go bezpośrednio zainstalować z pakietów.
ysdx 17.07.17
7

Musisz zrobić coś więcej niż tylko komentowanie dyrektywy, jak tu napisano :

Odkomentuj tę dyrektywę, aby umożliwić innym klientom wzajemne „widzenie”. Domyślnie klienci będą widzieć tylko serwer. Aby zmusić klientów do wyświetlania tylko serwera, musisz również odpowiednio zaporę ogniową interfejsu TUN / TAP serwera.

Dlatego możesz skonfigurować osobne zasady dotyczące adresów IP dla każdego klienta. Zobacz sekcję Konfigurowanie reguł specyficznych dla klienta i zasad dostępu tutaj: https://openvpn.net/index.php/open-source/documentation/howto.html . i tutaj: https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client .

Diamant
źródło
Oznacza to, co myślałem: jedynym sposobem na osiągnięcie tego jest umieszczenie każdego klienta w różnych podsieciach. To głównie odpowiada na pytanie, a także dałeś dokumentację, jak to zrobić. Oznaczę to jako odpowiedź. Dzięki.
lobi
6

Następny akapit strony podręcznika zawiera openvpnodpowiedzi na to pytanie, chociaż w pierwszym czytaniu niekoniecznie jest jasne:

Ponieważ tryb serwera OpenVPN obsługuje wielu klientów za pośrednictwem jednego interfejsu tun lub tap, jest to faktycznie router. --client-to-client Flaga mówi OpenVPN do wewnętrznie trasy ruchu klient-klient zamiast pchania cały ruch klienta pochodzącego z interfejsem TUN / TAP.

Gdy ta opcja jest używana, każdy klient „zobaczy” innych klientów, którzy są aktualnie połączeni. W przeciwnym razie każdy klient będzie widział tylko serwer. Nie używaj tej opcji, jeśli chcesz zaporowo zapory tunelować ruch przy użyciu niestandardowych reguł dla poszczególnych klientów.

Ta client-to-clientopcja powoduje zwarcie normalnych tabel routingu na serwerze. Usunięcie go nie uniemożliwia klientom korzystania z tabel routingu serwera. Jeśli te tabele routingu - i konfiguracja zapory serwera - zezwalają klientom na wzajemne zobaczenie, będą mogli to zrobić.

roaima
źródło