Problem:
Łączę się przez klienta OpenVPN na komputerze, potrzebuje aby ruch był tunelowany tylko do jednego adresu IP.
Cały pozostały ruch ma wychodzić przez lokalny adres IP.

Rozwiązanie
Mechanizm nazywa się split-tunneling i umożliwia przekierowanie ruchu VPN tylko do konkretnych adresów IP.

Po zestawieniu sesji VPN przez OpenVPN klienta, cały ruch do Internetu wychodzi przez VPN, czyli ma inny publiczny adres IP niż nasz lokalny.

Przykład:
Chcemy aby tylko ruch do adresu wp.pl (212.77.100.101) wychodził przez tunel VPN
W pliku konfiguracyjnym zmieniamy ostatnią linijkę:

Usuwamy:

redirect-gateway def1


Dodajemy:

route-nopull  
route 212.77.100.101 255.255.255.255 vpn_gateway


Oczywiście możemy dodać więcej adresów IP w kolejnych linijkach.
Niestety nie możemy dodać nazwy domeny jak "wp.pl" wiec zmiana nie zadziała na portalach gdzie oprócz głównego adresu IP,
pod którym jest strona, dane pobierane są jeszcze z innych źródeł np. portale vod.
Oczywiście dodatkowe adresy możemy pozyskać za pomocą sniffera, ale to już bardziej zaawansowana zabawa ;)

Plik przed zmianą:


client 
 dev tun 
 remote "adres serwera vpn" 443 
 proto tcp-client 
 remote-cert-tls server 
 auth-user-pass auth.txt 
 tls-client 
 pull 
 persist-key 
 resolv-retry infinite 
 reneg-sec 0 
 verb 3 
 script-security 2 system 
 auth-nocache 
 route-delay 2 
 redirect-gateway def1


Plik po zmianie:


client 
 dev tun 
 remote "adres serwera vpn" 443 
 proto tcp-client 
 remote-cert-tls server 
 auth-user-pass auth.txt 
 tls-client 
 pull 
 persist-key 
 resolv-retry infinite 
 reneg-sec 0 
 verb 3 
 script-security 2 system 
 auth-nocache 
 route-delay 2 
 route-nopull  
 route 212.77.100.101 255.255.255.255 vpn_gateway