OpenWRT jako klient OpenVPN

crown

OpenWRT jako klient OpenVPN
« kdy: 03. 08. 2016, 16:02:52 »
Ahoj,

uz jsem s tim stravil plno casu a delam tam nejakou blbou chybu.

Nastavuju router s openWRT jako klient pro openVPN.
Doslat jsem se do stavu, ze openVPN se pripoji (to je ta adresa 10.0.0.xx). Spolu s VNP tap0 jsem dal do bridge wifi0
Problem je ale, ze kdyz se pripojim na wifi0, tak nedostanu pridelenou IP adresu. Myslel jsem, ze ji prideli openVPN server (ten funguje i jako dhcp server pro sit 10.0.0.xx)

Nemate napad? Dalsi info muzu doplnit, nechci toho hned lepit moc.

V LAN skupine zustal ethernet port, abych mohl router nastavovat.

Tap pouzivam, protoze pro nektere veci potrebuju byt na stejnem segmentu site. Je mi jasne, ze tun by by neprenasel zbytecne blbosti a byl by pro vetsinu veci efektivnejsi.
« Poslední změna: 03. 08. 2016, 20:16:09 od Petr Krčmář »


source

Re:OpenWRT s openvpn
« Odpověď #1 kdy: 03. 08. 2016, 17:34:06 »
Přijde mi, že nemůžeš míchat tap klienta s wlan s dalšími klienty.
Připojuješ router na server, to je 1 klient. Ten klient ale dne mne jen tak adresy ze serveru přerozdělovat dalším klientům nebude. Možná to bude chtít nějaké speciální pravidla pro firewall.

crown

Re:OpenWRT s openvpn
« Odpověď #2 kdy: 04. 08. 2016, 10:21:41 »
Přijde mi, že nemůžeš míchat tap klienta s wlan s dalšími klienty.
Připojuješ router na server, to je 1 klient. Ten klient ale dne mne jen tak adresy ze serveru přerozdělovat dalším klientům nebude. Možná to bude chtít nějaké speciální pravidla pro firewall.

jj, ja si myslim, ze mam blbe pravidla ve firewallu. Jeste si s tim budu hrat. Predtim mi to dokonce jednu chvili slo, ale uz se to nepovedlo zopakovat.
Ten tap by mel pripojit wifi a chovat se, jako kdyby byla soucasni eternet segmentu. Klienti na wifi by tedy meli dostavat IP or dhcp serveru toho eternetoveho segmentu. Teda teoreticky - praxe mi zatim pokulhava.

crown

Re:OpenWRT jako klient OpenVPN
« Odpověď #3 kdy: 09. 08. 2016, 10:13:27 »
nema nekdo napad?

Fish

Re:OpenWRT jako klient OpenVPN
« Odpověď #4 kdy: 09. 08. 2016, 11:20:49 »
OpenVPN server není dhcp, tudíž nebude přidělovat IP zařízením za klientem. Stejně tak nemůžeš přidělovat IP z klienta, pokud chceš mít jeho síť v bridge s tap rozhraním. Teda možná by to šlo, pokud bysis ohlídal, že lokální DHCP bude přidělovat jen IP, které nepřidělí nikdo další a musel bys u bridge pravděpodobně nastavit setageing na 0.
Čistší řešení by bylo pustit DHCP server na rozhraní OpenVPN serveru - nezkoušel jsem, jestli to jde udělat napřímo. Já mám obdobnou konfiguraci, kde je ale bridge na obou stranách, takže OpenVPN funguje jako transparentní tunel a klienti dostávají IP z jednoho DHCP, ať jsou lokálně nebo ve vzdálené lokalitě za WRT.


Re:OpenWRT jako klient OpenVPN
« Odpověď #5 kdy: 09. 08. 2016, 11:32:50 »
DHCP server by na OpenWRT pro rozhrani br-VPN_CLIENT mel byt vypnuty (DHCP klient muze byt zapnuty, ale staticky pridelena adresa muze byt praktictejsi).

My mame konfiguraci tap+wifi(+bridge s eth VLAN rozhranim) funkcni. Je to proste:
V LuCI v nastaveni br-VPN_CLIENT bych overil:
V General Setup
"No DHCP Server configured for this interface"

V Physical Settings
Bridge Interfaces - zaškrtnuto (zřejmě je, podle obrázku)
Interface - Wireless Network XXX - zaškrtnuto

Výpis bridgů (je vidět bridge wlan0 a tap interface):
root@OpenWrt:~# brctl show
bridge name     bridge id               STP enabled     interfaces
br-Phones_Test  7fff.d4ca6d06e8dc       no              wlan0
                                                        tap_Test

Výpis up-skriptu pro tunel:
root@OpenWrt:~# cat /etc/openvpn/test.up.sh
#!/bin/sh

ip link set tap_Test up
brctl addif br-Phones_Test tap_Test

Použitý konfigurák (až na up-skript tam není nic speciálního):
root@OpenWrt:~# cat /etc/openvpn/<vpn>.conf
client
dev tap_Test
proto udp
remote <hostname> <port> udp
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
ns-cert-type server
ca <ca.crt>
cert <klient.crt>
key <klient.key>
script-security 2
up /etc/openvpn/test.up.sh

Přidejte nám sem výpis
brctl show
ip a s br-VPN_client

Všechno to samozřejmě předpokládá, že wifi je správně nastavená. :-)
Možná by stálo za to, rozdělit eth porty do dvou VLAN/skupin (v LuCI v menu Network-Switch) a část portů přiřadit do br-VPN_client. Pak by bylo možné zkoušet DHCP klienta připojeného pomocí ethernetu.

crown

Re:OpenWRT jako klient OpenVPN
« Odpověď #6 kdy: 09. 08. 2016, 16:05:44 »
Radek Zajíc: Diky, kouknu a zkopiruju to sem (k routeru se dostanu o vikendu).

Na serveru je tap0 v bridge s LAN. Ta pridelena adreasa 10.0.0.172 je z DHCP serveru lan u serveru. (V openVPN serveru je nastaveno 10.0.0.10-10.0.0.50, zatimco LAN DHCP na serveru ma nastaveno 10.0.0.170 a vyse)

Fish: hodil bys sem prosim take tvuj konfigurak?

Diky

Fish

Re:OpenWRT jako klient OpenVPN
« Odpověď #7 kdy: 09. 08. 2016, 19:53:44 »
Mě se zdá, že to trochu motáš všechno dohromady. Jestli už i na serveru to máš jako bridge, tak v OpenVPN nemá co dělat přidělování adres. Ono to teda jde udělat i s tím, ale zbytečně se to tím komplikuje. Zkusil jsem si teď celou konfiguraci udělat doma načisto a funguje mi to. Pokud je na serveru zapnutý přidělování IP, je potřeba na klientovi přidat v OpenVPN volbu ifconfig_noexec, jinak se IP přidělí na tap interface a ne na bridge. Ono to může a nemusí vadit, protože klienti za ním i tak fungují normálně, jen by nebylo dostupné WRT na IP z toho tunelovaného rozsahu.

Přikládám testovací konfiguraci. eth0.3 je nově zřízená VLANa na jednom z portů WRT, kam jsem připojil testovací notebook.

Na konfiguraci serveru není asi co řešit, jen bych vyhodil server-bridge.

Na WRT:
/etc/config/openvpn:
Kód: [Vybrat]
config openvpn company
        option enable 1
        option client 1
        option remote ____server____
        option port ____port____
        option proto tcp
        option dev tap11
        option ca /etc/openvpn/ca.crt
        option cert /etc/openvpn/fish-wrt.crt
        option key /etc/openvpn/fish-wrt.key
        option comp_lzo yes
        option keepalive "10 120"
        option status /tmp/openvpn.status
        option persist_key 1
        option persist_tun 1
        option verb 1
        option mute 20
        option nobind 1
        option ifconfig_noexec 1

/etc/conf/network (jen související interface):
Kód: [Vybrat]
config interface 'company'
        option _orig_ifname 'tap11'
        option _orig_bridge 'true'
        option ifname 'eth0.3 tap11'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.1.142'
        option netmask '255.255.255.0'

Zřízený bridge interface musí být unmanaged nebo static. S DHCP se WRT nevypořádá.

Klient připojený na eth0.3 pak vidí transparentně do firemní sítě a obráceně. WRT je na staticky přidělené IP vidět taky z obou lokalit.

Zkusil jsem přes GUI do bridge přidat i wifi síť a taktéž funguje. Ta není v konfiguraci vidět, protože je spárovaná přes wireless.@wifi-iface[0].network='company'.

crown

Re:OpenWRT jako klient OpenVPN
« Odpověď #8 kdy: 10. 08. 2016, 14:18:55 »
Fish: diky moc, zkusim upravit podle tve rady. Muzes prosim jeste hodit soubor firewall ?

Fish

Re:OpenWRT jako klient OpenVPN
« Odpověď #9 kdy: 10. 08. 2016, 15:23:34 »
Můžu, ale myslím, že to není potřeba, protože jsem do něj v souvislosti s tím tunelem nic nepřidával.

Jen ještě doplním, že na routeru je OpenWrt Chaos Calmer. Ale mám pocit, že jsem někde měl i Barrier Breaker ve stejném nastavení.

crown

Re:OpenWRT jako klient OpenVPN
« Odpověď #10 kdy: 10. 08. 2016, 15:40:11 »
Ja tam mam taky Chaos Calmer (router Nexx WT3020).
Diky

crown

Re:OpenWRT jako klient OpenVPN
« Odpověď #11 kdy: 15. 08. 2016, 15:23:43 »
Ahoj, tak uz to funguje pekne. Je to citlive na silu wifi, takze musi byt blizko nebo spravne namirena antena. Diky moc kluci!

Mimochodem ten maly nexx WT3020 zvlada 8mbit (rychlost zdejsi linky) uplne v pohode kolem 40% load.

Pro ostatni a i pro me do budoucna etc/config

Kód: [Vybrat]
root@OpenWrt:/etc/config# cat network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'xxxx:xxxx:xxxx::/48'

config interface 'VPN_client'
        option _orig_ifname 'tap0'
        option _orig_bridge 'true'
        option proto 'static'
        option type 'bridge'
        option ipaddr '10.0.0.251'
        option netmask '255.255.255.0'
        option ifname 'tap0 wlan1'
        option gateway '10.0.0.138'

config interface 'wan'
        option _orig_ifname 'eth0.2'
        option _orig_bridge 'false'
        option proto 'dhcp'
        option ifname 'eth0.2'
        option delegate '0'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 4 6t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '0 6t'

config interface 'wwan'
        option proto 'dhcp'
        option delegate '0'

config interface 'LAN_wire'
        option proto 'static'
        option ifname 'eth0.1'
        option ipaddr '192.168.5.1'
        option netmask '255.255.255.0'
        option gateway '192.168.5.1'

Kód: [Vybrat]
root@OpenWrt:/etc/config# cat firewall

config defaults
        option syn_flood '1'
        option output 'ACCEPT'
        option input 'ACCEPT'
        option forward 'ACCEPT'

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

config zone
        option name 'wan'
        option output 'ACCEPT'
        option masq '1'
        option mtu_fix '1'
        option network 'wan wan6 wwan'
        option forward 'ACCEPT'
        option input 'ACCEPT'

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

config rule
        option name 'Allow-DHCP-Renew'
        option src 'wan'
        option proto 'udp'
        option dest_port '68'
        option target 'ACCEPT'
        option family 'ipv4'

config rule
        option name 'Allow-Ping'
        option src 'wan'
        option proto 'icmp'
        option icmp_type 'echo-request'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-IGMP'
        option src 'wan'
        option proto 'igmp'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-DHCPv6'
        option src 'wan'
        option proto 'udp'
        option src_ip 'fe80::/10'
        option src_port '547'
        option dest_ip 'fe80::/10'
        option dest_port '546'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-MLD'
        option src 'wan'
        option proto 'icmp'
        option src_ip 'fe80::/10'
        list icmp_type '130/0'
        list icmp_type '131/0'
        list icmp_type '132/0'
        list icmp_type '143/0'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Input'
        option src 'wan'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        list icmp_type 'router-solicitation'
        list icmp_type 'neighbour-solicitation'
        list icmp_type 'router-advertisement'
        list icmp_type 'neighbour-advertisement'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Forward'
        option src 'wan'
        option dest '*'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config include
        option path '/etc/firewall.user'

config rule
        option src 'wan'
        option dest 'lan'
        option proto 'esp'
        option target 'ACCEPT'

config rule
        option src 'wan'
        option dest 'lan'
        option dest_port '500'
        option proto 'udp'
        option target 'ACCEPT'

config forwarding
        option dest 'wan'
        option src 'lan'

Kód: [Vybrat]
root@OpenWrt:/etc/config# cat dhcp

config dnsmasq
        option domainneeded '1'
        option boguspriv '1'
        option filterwin2k '0'
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option nonegcache '0'
        option authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.auto'
        option localservice '1'

#config dhcp 'lan'
#       option interface 'lan'
#       option start '100'
#       option limit '150'
#       option leasetime '12h'
#       option dhcpv6 'server'
#       option ra 'server'
#       option ra_management '1'

config dhcp 'wan'
        option interface 'wan'
        option ignore '1'

config odhcpd 'odhcpd'
        option maindhcp '0'
        option leasefile '/tmp/hosts/odhcpd'
        option leasetrigger '/usr/sbin/odhcpd-update'

config dhcp 'LAN_wire'
        option start '100'
        option leasetime '12h'
        option limit '150'
        option interface 'LAN_wire'

Kód: [Vybrat]
root@OpenWrt:/etc/config# cat openvpn
config 'openvpn' 'lan'
option 'enable' '1'
option 'tls_client' '1'
option 'port' '1194'
#option 'proto' 'tcp-client'
option 'proto' 'udp'
option 'remote' 'xx.xx.xx.xx 1194'
option 'dev' 'tap0'
option 'ca' '/etc/openvpn/ca.crt'
option 'cert' '/etc/openvpn/client1.crt'
option 'key' '/etc/openvpn/client1.key'
option 'resolv-retry' ' infinite'
option 'nobind' '1'
option 'mute-replay-warnings' '1'
option 'comp_lzo' 'yes'
option 'status' '/tmp/openvpn_tap0.status'
option 'persist_key' '1'
option 'persist_tun' '1'
option 'verb' '1'
#option 'mute' '20'
#option 'nobind' '1'
option 'ifconfig_noexec' '1'


crown

Re:OpenWRT jako klient OpenVPN
« Odpověď #12 kdy: 15. 08. 2016, 15:50:20 »
Tady je vytizeni, kdyby to nekoho zajimalo.


crown

Re:OpenWRT jako klient OpenVPN
« Odpověď #13 kdy: 16. 08. 2016, 12:09:09 »
a jeste watchdog, vpn zrejme nenavaze spojeni samo pri vypadku.

Kód: [Vybrat]
root@OpenWrt:~# cat ./vpn-watchdog.sh
#!/bin/sh

tries=0
while [[ $tries -lt 5 ]]
do
        if /bin/ping -c 1 10.0.0.138 >/dev/null
        then
                echo 'VPN connection OK'
                exit 0
        fi
        tries=$((tries+1))
done
echo 'Restarting VPN'
/etc/init.d/openvpn restart

Kód: [Vybrat]
root@OpenWrt:~# cat ./wan-watchdog.sh
#!/bin/sh

tries=0
while [[ $tries -lt 5 ]]
do
        if /bin/ping -c 1 8.8.8.8 >/dev/null
        then
                echo 'WAN Connection OK'
                exit 0
        fi
        tries=$((tries+1))
done
echo 'Restarting WAN network'
/etc/init.d/network restart

a do cronu
Kód: [Vybrat]
root@OpenWrt:/etc/crontabs# cat root
5 * * * * /root/vpn-watchdog.sh
5 * * * * /root/wan-watchdog.sh