1 (edytowany przez mvincm 2018-09-10 20:27:19)

Temat: [SOLVED] OpenVPN - klient w sieci lokalnej, konfiguracja SNAT

Witam.

Szanowni wiem, że temat OpenVPN był poruszany już milion razy ale takiego cuda jeszcze chyba nie było.

Konfiguracja:

- Serwer VPN na publicznym IP, Debian 9.5, konfiguracja TUN, subnet, sieć 192.168.26.0/24, ip von 192.168.26.1 (plik konfiguracyjny później).
- Klient OpenWRT (sieć lokalna: 192.168.24.0/24, ip vpn: 192.168.26.10)
- Klient Windows (sieć lokalna: 192.168.22.0/24 ip vpn: 192.168.26.12)
- Klient OpenWRT nie jest bramą domyślną w sieci lokalnej i nie będzie raczej (co rzutuje na przedstawiany problem)

Scenariusz:

Klient Windows z sieci 192.168.22.0/24 ma mieć dostęp do sieci lokalnej klienta OpenWRT tj. 192.168.24.0/24 (ku pamięci OpenWRT nie jest bramą domyślną dla 24.0). Wniosek, że klient OpenWRT musi robić SNAT z sieci vpn 26.0 na swój adres IP (192.168.24.31) do swojej sieci lokalnej 24.0.

Stan obecny:

Ruch/pingi między klientami działają, między serwerem OpenVPN a klientami działają. Ruch pingi do dowolnego hosta w sieci 24.0 idzie ale klient OpenWRT zwraca REJECT a konkretnie "destination host unreachable". Pakiety na kliencie OpenWRT trafiają do destination REJECT (widać do po rosnącym liczniku pakietów REJECT w iptables).

No i nie wiem dlaczego ten SNAT mi nie dzieła i dlaczego któraś reguła wymusza skierowanie do REJECT. Z góry dodam (czego nie widać w konfigu), że dodaję oczywiście trasę do sieci 24.0 (robiłem to na dwa sposoby: przez ip klienta OpenWRT jako  "gw" do sieci 24.0 oraz inaczej routing do sieci 24.0 po prostu przez interfejs tun0 bez podawania "gw"). Z resztą routing działa bo można pingać 192.168.24.31.

Konfiguracja:

Serwer OpenVPN (server.conf)

port 443
proto udp
dev tun
ca /etc/openvpn/certs/keys/ca.crt
cert /etc/openvpn/certs/keys/server.crt
key /etc/openvpn/certs/keys/server.key
dh dh4096.pem
topology subnet
server 192.168.26.0 255.255.255.0
client-to-client
keepalive 5 30
tls-auth /etc/openvpn/certs/keys/ta.key 0
cipher AES-256-CBC
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1

OpenWRT (client.conf):

config openvpn 'sample_client'
        option client '1'
        option dev 'tun'
        option proto 'udp'
        option resolv_retry 'infinite'
        option nobind '1'
        option persist_key '1'
        option persist_tun '1'
        option user 'nobody'
        option comp_lzo 'yes'
        option verb '3'
        option pull '1'
        option remote_random '0'
        option cert '/etc/luci-uploads/cbid.openvpn.sample_client.cert'
        option key '/etc/luci-uploads/cbid.openvpn.sample_client.key'
        option ca '/etc/luci-uploads/cbid.openvpn.sample_client.ca'
        list remote 'moj.vpn.pl 443'
        option tls_auth '/etc/openvpn/ta.key 1'
        option cipher 'AES-256-CBC'
        option auth 'SHA512'
        option keepalive '5 30'
        option enabled '1'
        option keysize '256'

OpenWRT (firewall)

config zone
        option input 'ACCEPT'
        option output 'ACCEPT'
        option name 'vpn'
        option forward 'ACCEPT'
        option network 'vpn'

config redirect
        option target 'SNAT'
        option src 'vpn'
        option dest 'lan'
        option name 'vpn-lan'
        option src_dip '192.168.24.31'
        option enabled '1'
        option src_ip '192.168.26.0/24'
        option dest_ip '192.168.24.0/24'
        option proto 'all'

config forwarding
        option dest 'lan'
        option src 'vpn'

config forwarding
        option dest 'wan'
        option src 'vpn'

config forwarding
        option dest 'vpn'
        option src 'lan'

Z góry dzięki za pomoc w rozwiązaniu tej zagadki !!!

Pozdrawiam
MvincM

2

Odp: [SOLVED] OpenVPN - klient w sieci lokalnej, konfiguracja SNAT

Jeżeli dobrze zrozumiałem to zarówno klient Windows jak i OpenWRT łączą się z serwerem OpenVPN na Debianie.
Zacznijmy od Debiana. Do konfiguracji OpenVPN dodaj:

route 192.168.24.0 255.255.255.0 192.168.26.10
route 192.168.22.0 255.255.255.0  192.168.26.12
client-config-dir ccd

Wciąż na Debianie. W katalogu /etc/openvpn/ccd/ umieść plik, który musi nazywać się tak samo jak "common_name" OpenWRT i tam dodaj:

push "route 192.168.22.0 255.255.255.0 192.168.26.12"

analogicznie dla Windows:

push "route 192.168.24.0 255.255.255.0 192.168.26.10"

W sieci 192.168.24.0/24 masz pewnie serwer DHCP. Dopisz mu do konfiguracji by rozsyłał swoim klientom statyczny routing:

192.168.22.0/24 via "IP w seci lokalnej OpenWRT"

Jak to zrobić zależy od tego jaki masz serwer DHCP.

GUI jest przereklamowane

ASUS WL-500gP v2, TP-Link TL-MR3420 v2, TP-Link TL-WR1043ND v3, TP-Link TL-WDR4300 v1, D-Link DWR-921 C3,
Netgear R6220

3

Odp: [SOLVED] OpenVPN - klient w sieci lokalnej, konfiguracja SNAT

Dzięki za odpowiedź i chęć pomocy !

Generalnie to co proponujesz jest oparte  na routingu i powinno działać. Jest mi to znajome. Ogólnie dodawałem routing (na testy) poprzez "route add..." na klientach i serwerze a nie wymuszone z OpenVPN ale nie w tym rzecz ponieważ:

- mój klient OpenWRT nie jest deafult gw w swojej sieci
- dostępu do routera/bramy nie mam wprost
- a nawet jakbym miał to jest to router LTE (brandowany) w którym nie można dodać "static route" a tym bardziej specyficznych opcji DHCP aby wskazać dedykowane bramy
- a poza tym wszystkim kurcze ten SNAT musi chodzić, to nie magia... i to mnie najbardziej denerwuje, tym bardziej, że na starszym OpenWRT (jeszcze LEDE) taka konfiguracja działała poprawnie. Czyli coś w ustawieniach firewall na OpenWRT nie jest poprawne

Może ktoś ma jeszcze jakiś pomysł? Z góry dzięki.

MvincM

4

Odp: [SOLVED] OpenVPN - klient w sieci lokalnej, konfiguracja SNAT

ROZWIĄZANE !!!

Dla potomnych.

plik: /etc/config/firewall

Jest:

config zone
        option name 'lan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        option network ' '

Powinno być:

config zone
        option name 'lan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        option network 'lan'

Brakuje "lan" w "option network". Efektem czego było odrzucanie pakietów wychodzących z lan do vpn. Oczywiście w pierwszym swoim poście uznałem te linie za mało ważne i ich nie zamieściłem jako zrzut z /etc/config/firewall no ale już wiemy, że były ważne.

Dzięki za chęć pomocy !

P.S.
Podpowiem, że nie mam pojęcia jakim cudem zniknął ten znaczący drobiazg z pliku.

Pozdrawiam,
MvincM

5

Odp: [SOLVED] OpenVPN - klient w sieci lokalnej, konfiguracja SNAT

mvincm napisał/a:

mój klient OpenWRT nie jest deafult gw w swojej sieci

Nie ma takiej potrzeby.

mvincm napisał/a:

a nawet jakbym miał to jest to router LTE (brandowany) w którym nie można dodać "static route" a tym bardziej specyficznych opcji DHCP aby wskazać dedykowane bramy

W takim przypadku wyłączyłbym DHCP na routerze LTE i powierzył to zadanie OpenWRT.

mvincm napisał/a:

a poza tym wszystkim kurcze ten SNAT musi chodzić

Osobiście traktuję NAT jak zło konieczne. Stosuję tylko tam gdzie nie mam innego rozwiązania.

GUI jest przereklamowane

ASUS WL-500gP v2, TP-Link TL-MR3420 v2, TP-Link TL-WR1043ND v3, TP-Link TL-WDR4300 v1, D-Link DWR-921 C3,
Netgear R6220

6

Odp: [SOLVED] OpenVPN - klient w sieci lokalnej, konfiguracja SNAT

Witam.

Faktycznie można wyłączyć DHCP na routerze LTE i przenieść na OpenWRT. Wtedy w dnsmasq wykorzystać opcję 121 (zgodnie z RFC-3442). W tej opcji wszytko może opierać się na routingu na poziomie hostów (wsparty wewnętrznym routingiem w tunelu VPN - opcja "iroute" w odpowiednich plikach *.ccd) i faktycznie nie będzie potrzeba SNAT.

BTW... dlaczego NATa w tym przypadku SNATa uważasz za zło konieczne?

7

Odp: [SOLVED] OpenVPN - klient w sieci lokalnej, konfiguracja SNAT

mvincm napisał/a:

BTW... dlaczego NATa w tym przypadku SNATa uważasz za zło konieczne?

Powodów jest kilka, ale najważniejszy to wpływ NAT na ogólną wydajność systemu. Każde dodatkowe zadanie obciąża procesor, zabiera pamięć, itd. A co się stanie gdy np. zabraknie miejsca w tablicy translacji adresów?
W IPV6 wprowadzono mechanizmy, które ograniczą do minimum konieczność stosowania NAT.

GUI jest przereklamowane

ASUS WL-500gP v2, TP-Link TL-MR3420 v2, TP-Link TL-WR1043ND v3, TP-Link TL-WDR4300 v1, D-Link DWR-921 C3,
Netgear R6220