Puncte:0

OpenVPN: Can't route to private network once connected to VPN tunnel

drapel cm

I'm trying to setup an OpenVPN server to allow tunnelling to a private network (192.168.0.0/16) but when my VPN client is connected it cannot reach hosts on this network. No firewall is currently setup for the network/all ports are open. The server running OpenVPN is assigned the IP 192.168.0.2 on the private network

server.conf

local 1.2.3.4
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.255.0
server-ipv6 fddd:1194:1194:1194::/64
push "redirect-gateway def1 ipv6 bypass-dhcp"
push "route 192.168.0.0 255.255.0.0"
push "dhcp-option DNS 10.8.0.1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
verb 3
crl-verify crl.pem
explicit-exit-notify

client.ovpn

client
dev tun
proto udp
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
ignore-unknown-option block-outside-dns
block-outside-dns
verb 3
<ca>
REDACTED
</ca>
<cert>
REDACTED
</cert>
<key>
REDACTED
</key>
<tls-crypt>
REDACTED
</tls-crypt>

Client connected to the OpenVPN server can ping the OpenVPN gateway as well as using its IP on the other subnet. However it can't ping a different host on the same network...

[26/10/21 19:58:32] user@client:~$ ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=27.3 ms
^C
--- 10.8.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 27.276/27.276/27.276/0.000 ms
[26/10/21 19:58:49] user@client:~$ ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=27.3 ms
^C
--- 192.168.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 27.271/27.271/27.271/0.000 ms
[26/10/21 19:58:52] user@client:~$ ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
^C
--- 192.168.0.3 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

OpenVPN server can ping a different host on the same network...

root@server:~# ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=1.26 ms
^C
--- 192.168.0.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.262/1.262/1.262/0.000 ms

OpenVPN server route table...

root@server:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.31.1.1      0.0.0.0         UG    100    0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
172.31.1.1      0.0.0.0         255.255.255.255 UH    100    0        0 eth0
192.168.0.0     192.168.0.1     255.255.255.0   UG    0      0        0 ens10
192.168.0.1     0.0.0.0         255.255.255.255 UH    0      0        0 ens10

192.168.0.3 routing table...

root@server:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
_gateway        0.0.0.0         255.255.255.255 UH    100    0        0 eth0
192.168.0.0     192.168.0.1     255.255.0.0     UG    0      0        0 ens10
192.168.0.1     0.0.0.0         255.255.255.255 UH    0      0        0 ens10

Any help is appreciated.

Thanks.

Nikita Kipriyanov avatar
drapel za
Vă rugăm să afișați rutarea pe alte gazde decât `192.168.0.2`. Afișați, de asemenea, tabelul de rutare de pe sistem care este setat ca gateway implicit al acelor gazde (probabil, `192.168.0.1`). De asemenea, *nu folosi niciodată `rută`*, este străvechi, înșelător și de fapt greu de citit. Eliminați `net-tools` imediat (apropo, Debian 10 și 11 vin deja implicit fără acest pachet, deci cu siguranță nu este esențial). Utilizați întotdeauna `ip route` și alte caracteristici `iproute2`, care este modalitatea corectă de a configura și de a lucra cu stiva de rețea Linux „modernă” (circa 2000).
Nikita Kipriyanov avatar
drapel za
Voi strica gândul: bănuiesc că nu este nimic în neregulă cu calea de la 10.8.x.x la 192.168.0.x, dar există unele probleme în direcția inversă. Sunt pachetele inversate care nu pot fi livrate, nu expediate.
Mark Hingston avatar
drapel cm
Mulțumesc @NikitaKipriyanov. Mi-am actualizat întrebarea cu tabelul de rutare pentru 192.168.0.3. Punct luat despre utilizarea `ruta ip`. Nu sunt sigur cum să procedez pentru a actualiza tabelul de rutare pentru gazde pe LAN pentru această configurație.
Nikita Kipriyanov avatar
drapel za
În general, rulați un serviciu VPN *pe router* care este, de exemplu, gateway-ul implicit pentru unele rețele LAN. Sau pe alt router, dar lucrul care este gateway ar trebui să aibă o rută dedicată către VPN prin intermediul acestuia. // Și încă foloseai ruta.Omorâți acest obicei cu focul, este mai rău decât fumatul. Serios, Docker ar fi imposibil fără funcționalitatea `ip route`, deoarece utilitarul `route` nu știe nimic despre spațiile de nume, pe baza cărora este construit Docker. ifconfig, route, iptunnel, tunctl, brctl, vconfig â toate acestea au fost înlocuite și nu ar trebui să mai fie utilizate.
Puncte:1
drapel bq

Protocolul Internet se uită numai la adresa IP de destinație atunci când rutați pachetele. Nu le pasă de unde a venit un pachet. Nu le pasă că pachetul ar putea face parte dintr-o sesiune sau conexiune sau aplicație mai mare. Singurul lucru care contează este adresa IP de destinație. IP se uită apoi la tabelul de rutare pentru a determina ce să facă cu fiecare pachet, pe baza exclusivă a adresei de destinație. (Din punct de vedere tehnic, lucruri precum firewall-urile complete și rutarea de poliție pot face ca acest lucru să fie o minciună, dar va funcționa pentru scopurile actuale.)

După cum subliniază @Nikita, și rezultatul traseu (8) emisiuni, gazde ca 192.168.0.3 (și, probabil, alte gazde din rețeaua dvs.) știu doar să trimită pachete către router la 192.168.0.1. Nu au ce să le spună să trimită pachete către sistemul dumneavoastră OpenVPN la 192.168.0.2.. Asa de .3 iar prietenii își vor trimite tot traficul către routerul tău. Routerul tău nu știe despre VPN-ul tău. Routerul dvs. fie va arunca pachetele, fie le va trimite pe internetul public (unde probabil că următorul router hop le va arunca).

Sunt multiple soluții posibile.

Soluția #1 - Ușoară, dar ineficientă

Spune-i routerului tău asta 10.8.0.0/24 este accesibil prin poarta de acces la 192.168.0.2. Acest lucru va avea ca rezultat o rută în ac de păr -- pachetele vor merge de la gazde ca .3, la interfața LAN a routerului dvs. la .1, apoi retrageți aceeași interfață de router și la gateway-ul OpenVPN la .2. Acest lucru este ineficient, dar ar trebui să funcționeze.

Nu spui care este routerul tău, dar dacă ar fi Linux, comanda ar fi ceva de genul:

ruta ip adăugați 10.8.0.0/24 prin 192.168.0.2

Soluția #2 - Neintruzivă, dar plictisitoare

Puteți configura o rută statică pe fiecare gazdă LAN, spunându-le aceleași informații de rutare ca #1, dar peste tot. Aceasta ar fi o problemă minoră de configurat și întreținut, dar ar fi cea mai eficientă soluție care vă păstrează topologia rețelei existente. Aceeași comandă ca mai sus (pentru Linux), dar trebuie să o rulați pe fiecare gazdă LAN. De asemenea, trebuie să faceți acest lucru pe toate celelalte dispozitive care ar trebui să funcționeze prin VPN, inclusiv cutii Windows, imprimante, tablete, telefoane, becuri wifi etc. În cele din urmă, veți uita unul și vă veți întreba de ce nu funcționează, petreceți timp trăgând. îți ia părul și apoi simți-te ca un drog când îți amintești de ce.

Soluția #3 - sofisticată, dar perturbatoare

Puteți pune gateway-ul VPN pe calea de rutare către Internet. Există două subalternative aici.

Soluția #3A - VPN pe router

Chiar și routerele de consum pot rula uneori o implementare OpenVPN în zilele noastre, mai ales dacă utilizați firmware terță parte (OpenWRT, DD-WRT etc.). Cu toate acestea, adesea le lipsește puterea procesorului pentru o performanță adecvată. De asemenea, puteți înlocui consumatorul cu ceva mai bun -- un router comercial sau un alt Linux. S-ar putea chiar să puteți reînscrie gateway-ul VPN ca VPN+router+firewall.

În acest scenariu, VPN-ul și routerul sunt același lucru, așa că nu trebuie să vă faceți griji că routerul se înțelege cu gateway-ul VPN. Acesta este probabil cel mai eficient, în ceea ce privește proiectarea rețelei.

Soluția #3B - Stack Gateway și Router

Puteți pune gateway-ul VPN între router și restul rețelei LAN, cu subrețele IP diferite de fiecare parte a gateway-ului VPN. Toate celelalte gazde LAN trimit către gateway-ul VPN pentru a ajunge la Internet. Gateway-ul VPN trimite și redirecționează către router pentru a ajunge la Internet.

Acest lucru va necesita punerea a două interfețe de rețea în gateway-ul VPN -- una pentru LAN și una pentru transferul către rotuer. (Sau faceți o rută în ac de păr pe gateway-ul VPN, care este mai rău decât numărul 1 pentru că acum toate Traficul pe internet este acaparat).

Principalele avantaje ale acestei abordări sunt: ​​Îți poți păstra routerul existent (poate că ISP-ul tău te face să folosești echipamentul lor, poate că are o altă proprietate utilă pentru tine). Dacă cutia VPN se defectează, o puteți scoate din imagine și (poate) reconfigurați rapid routerul pentru a-i lua locul.

Mark Hingston avatar
drapel cm
Foarte util multumesc
Ben Scott avatar
drapel bq
@MarkHingston: Mă bucur că ați găsit acest lucru util. Dacă aveți nevoie de mai mult ajutor, vă rugăm să adăugați detalii într-un comentariu și/sau să vă revizuiți întrebarea. Dacă considerați că întrebarea dvs. a fost rezolvată, vă rugăm să [acceptați răspunsul](https://stackoverflow.com/help/someone-answers).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.