OpenVPN nie jest domyślną bramą dla całego ruchu

21

Próbuję zmusić mojego klienta do przekazywania całego ruchu przez VPS z OpenVPN. Jak widać, pozwoli pingom na domeny i nieprzetworzone adresy IP, ale nie pozwoli na ruch taki jak zawinięty, a traceroute niczego nie wymyśli. Ruch działa poprawnie, gdy nie jest podłączony do sieci VPN.

Wszystkie informacje są tutaj: https://pastebin.com/tGspNefn

Dziękuję Ci.

Działające konfiguracje dzięki rozwiązaniu poniżej:

Serwer:

port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key  # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

Klient:

client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3
DrDinosaur
źródło
/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.0.5 dlaczego maska ​​sieci 128.0.0.0?
Antony Gibbs
Dzięki DrDinosaur za wskazanie serverfault.com/questions/312860/…
Antony Gibbs
3
Następnym razem wyodrębnij odpowiednie informacje i dołącz je do pytania. Fragmenty Pastebin mają ograniczony okres użytkowania.
MLu,

Odpowiedzi:

34

Rozwiązanie składa się z dwóch części:

1. Przekieruj cały ruch do tunelu

Najłatwiejsze rozwiązanie - skorzystaj z --redirect-gateway autolocalopcji OpenVPN (lub umieść go w pliku konfiguracyjnym jako redirect-gateway autolocal.

2. Obsługuj ruch na serwerze OpenVPN

Teraz, gdy tunel jest włączony, cały ruch trafia do tunelu i wyskakuje na końcu serwera z tun0interfejsu.

Aby to działało, musisz skonfigurować dwie rzeczy:

za. Włącz przekazywanie pakietów

Domyślnie w większości dystrybucji przekazywanie pakietów jest wyłączone, dlatego pakiety z interfejsu tunelu nigdy nie trafiają do interfejsu publicznego. Musisz włączyć przekazywanie za pomocą:

~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

Po przetestowaniu dokonaj zmiany na stałe w /etc/sysctl.conf

Upewnij się również, że iptablesnie blokują przesyłanego dalej ruchu:

~ # iptables -I FORWARD -j ACCEPT

Jest to wystarczające do testowania - w produkcji będziesz chciał uczynić reguły zapory nieco bardziej szczegółowymi, ale tutaj nie ma to zastosowania.

b. NAT wychodzące pakiety z tunelu

Przy włączonym przesyłaniu pakiety są domyślnie przekazywane z niezmienionym adresem źródłowym, to znaczy w twoim przypadku 10.8.0.6- takie pakiety są albo upuszczane na bramie ISP, albo nawet jeśli dotrą do miejsca docelowego, odpowiedź nigdy nie znajdzie drogi powrotnej. Te prywatne adresy nie są routowalne w Internecie.

Rozwiązaniem jest NAT ruchu wychodzącego, tj. Zastąpić 10.8.0.6adres prywatny publicznym adresem IP serwera VPN. Zapewni to, że odpowiedzi dotrą do serwera VPN i tam zostaną przesłane z powrotem do tunelu.

~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3. Przetestuj to

Teraz spróbuj ping 8.8.4.4od swojego klienta VPN. Powinieneś zobaczyć odpowiedź. Daj nam znać, jeśli nie :)

MLu
źródło
Działa to teraz doskonale. Wielkie dzięki za odpowiedź wysokiej jakości.
DrDinosaur
Po stronie klienta dodaj dodaj pull do pliku client.conf lub dodaj opcję --pull do wiersza poleceń, aby klient zaakceptował konfigurację przekazaną przez serwer. Również jeśli klient działa w systemie Windows Vista lub nowszym wyłącz UAC, w przeciwnym razie usługa openpn działająca na kliencie nie będzie mogła ustawić tras.
Viktor,
> b. NAT wychodzące pakiety z tunelu To mi pomogło.
FelikZ
Naprawdę należy wziąć pod uwagę, że reguła FORWARD -j ACCEPT sprawia, że ​​serwer jest otwartym routerem między wszystkimi interfejsami. Nie wolno go stosować w systemach produkcyjnych. Ale jak to zrobić, aby działał szybko, bardzo dobry zestaw instrukcji.
Sprinterfreak,
Czy Redirect all the traffic into the tunnelkrok w konfiguracji klienta?
samolot