1

Temat: Wireguard tylko dla wybranej sieci

Router + AP to Synology RT6600ax
Router ma dwie sieci LAN: main (192.168.32.1/24) i vpn (192.168.33.1/24)
Do każdej sieci jest osobne WiFi.

Do tego jest apu2 z OpenWrt podłączony dwoma kablami:
- eth0 do sieci vpn (192.168.33.4/24)
- eth1 do sieci main (192.168.32.4/24)

apu2 jest klientem vpn (Wireguard) i chciałbym aby przez drugą sieć wifi ruch trafiał w tego VPNa.

W tym celu na Synology ustawiłem w ustawieniach drugiej sieci LAN bramę 192.168.33.4/24.
Na OpenWrt mam tak:

config interface 'lan'
        option device 'br-lan'
        option proto 'dhcp'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth1'
        list ports 'eth2'

config interface 'vpn'
        option device 'br-vpn'
        option proto 'static'
        option ipaddr '192.168.33.4'
        option netmask '255.255.255.0'
        option gateway '192.168.33.1'

config device
        option name 'br-vpn'
        option type 'bridge'
        list ports 'eth0'

config interface 'wg0'
        option proto 'wireguard'
        option private_key 'xxx='
        option dns 'xxxxx'
        list addresses '10.14.0.2/16'

config wireguard_wg0
        option public_key 'xxx='
        option route_allowed_ips '1'

Łącząc się przez drugie WiFi ruch idzie przez VPNa.

Ale chciałbym aby ruch z samego routera lub ostatniego portu lan apu2 nie wpadał w niego, a tak dzieje się.
I na tym niestety poległem.

Po pierwsze zmieniam route_allowed_ips na 0 w konfiguracji wireguarda aby ruch domyślnie nie wpadał w tunel.

Najbliżej sukcesu byłem wzorując się na https://forum.openwrt.org/t/source-ip-r … l/144790/3 uwzględniając uwagę dwa posty niżej.

Na kliencie przez wifi wygląda to tak:

64 bytes from 8.8.8.8: icmp_seq=89 ttl=117 time=6.415 ms //pierwsza sieć wifi
64 bytes from 8.8.8.8: icmp_seq=90 ttl=117 time=6.254 ms
64 bytes from 8.8.8.8: icmp_seq=91 ttl=117 time=6.510 ms
64 bytes from 8.8.8.8: icmp_seq=92 ttl=117 time=6.392 ms
64 bytes from 8.8.8.8: icmp_seq=93 ttl=117 time=6.415 ms
64 bytes from 8.8.8.8: icmp_seq=94 ttl=117 time=6.476 ms
64 bytes from 8.8.8.8: icmp_seq=95 ttl=117 time=6.578 ms
64 bytes from 8.8.8.8: icmp_seq=96 ttl=117 time=6.562 ms
64 bytes from 8.8.8.8: icmp_seq=97 ttl=117 time=6.513 ms
64 bytes from 8.8.8.8: icmp_seq=98 ttl=117 time=6.334 ms
64 bytes from 8.8.8.8: icmp_seq=99 ttl=117 time=6.395 ms
64 bytes from 8.8.8.8: icmp_seq=100 ttl=117 time=6.438 ms
64 bytes from 8.8.8.8: icmp_seq=101 ttl=109 time=122.651 ms //przełączenie na drugą
64 bytes from 8.8.8.8: icmp_seq=102 ttl=109 time=124.626 ms
64 bytes from 8.8.8.8: icmp_seq=103 ttl=109 time=126.469 ms
64 bytes from 8.8.8.8: icmp_seq=104 ttl=109 time=122.758 ms
Request timeout for icmp_seq 105 //i po chwili padło
Request timeout for icmp_seq 106
Request timeout for icmp_seq 107
Request timeout for icmp_seq 108
Request timeout for icmp_seq 109

Na apu2:

# ping -I 192.168.33.4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.33.4: 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=110 time=126.613 ms
64 bytes from 8.8.8.8: seq=2 ttl=110 time=117.808 ms
64 bytes from 8.8.8.8: seq=4 ttl=110 time=126.526 ms
64 bytes from 8.8.8.8: seq=6 ttl=110 time=117.682 ms
64 bytes from 8.8.8.8: seq=8 ttl=110 time=117.782 ms
64 bytes from 8.8.8.8: seq=10 ttl=110 time=117.795 ms
64 bytes from 8.8.8.8: seq=12 ttl=110 time=117.634 ms
64 bytes from 8.8.8.8: seq=14 ttl=110 time=117.596 ms
64 bytes from 8.8.8.8: seq=16 ttl=110 time=117.505 ms
64 bytes from 8.8.8.8: seq=18 ttl=110 time=117.739 ms

Co drugi ping przechodzi.

Obserwacje są powtarzalne.
Próbowałem kombinować z mwan3 (https://www.leowkahman.com/2016/06/19/c … stname-ip/) i pbr, ale tam w ogóle nie udało mi się uzyskać pingu przez sieć vpn.
Podejrzewam że moim problemem jest to że nie mam wanu na openwrt, tylko dwa lany.
Czy da się coś zrobić bez zmiany tego?

2

Odp: Wireguard tylko dla wybranej sieci

mwan3 i pbr działają na zasadzie: mam kilka wanów (nie lanów) i ruch z hosta xxx chce kierować przez drugi wan, itp. A ty co właściwie chcesz osiągnąć?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Wireguard tylko dla wybranej sieci

Jest:
Ruch z apu2 i klientów podłączonych do drugiego wifi idzie przez VPNa

Chcę:
Ruch z klientów podłączonych do drugiego wifi idzie przez VPNa

4

Odp: Wireguard tylko dla wybranej sieci

- zrób normalnego klienta wg, z list allowed_ips '0.0.0.0/0' itd. dodaj sobie tylko opcję metric 100

config interface 'wg0'
        option proto 'wireguard'
        option private_key 'xxx='
        option dns 'xxxxx'
        list addresses '10.14.0.2/16'
        option metric 100

config wireguard_wg0
        option public_key 'xxx='
        option route_allowed_ips '1'

- zmień interfejs vpn wywal gatewaya. Jeżeli router ma go za gatewaya to on nie może mieć gatewaya w routerze, zresztą ma wychodzić przez wg0. Tak ma wyglądać:

config device
        option name 'br-vpn'
        option type 'bridge'
    option bridge_empty '1'
        list ports eth0

config interface 'vpn'
        option device 'br-vpn'
        option proto 'static'
        option ipaddr '192.168.33.4'
        option netmask '255.255.255.0'

- dodaj route i rule

config route
        option table '100'
    option netmask '0.0.0.0'
        option target '0.0.0.0/0'
        option interface 'wg0'

config rule
        option src '192.168.33.0/24'
        option lookup '100'

- dodaj tablice 100

echo "100     vpn" >> etc/iproute2/rt_tables 

tak ma być:

root@OpenWrt:~# cat /etc/iproute2/rt_tables 
#
# reserved values
#
128    prelocal
255    local
254    main
253    default
0    unspec
#
# local
#
#1    inr.ruhep

100     vpn

- ew wyłącz dhcp na tym:

config dhcp 'vpn'
    option interface 'vpn'
        option ignore 1

I reboot całości. Domyślną trasę będziesz miał tak jak masz przez lan, będzie druga przez wg0 ale z metryką 100, więc nie leci nic przez nią. I sztucznie cały ruch z 192.168.33.0/24 będzie kierowany w tunel. APU będzie wychodziło przez lan, każdy klient z sieci lan przez lan, a coś na eth0 z taką adresacją pójdzie na wireguarda.

Wyłącz i odinstaluj mwan3 jeżeli go masz.

Sprawdziłem, działa takie coś na osobnej sieci wifi i wg0 jako wyjściem w świat.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez tymmej 2023-01-08 11:05:11)

Odp: Wireguard tylko dla wybranej sieci

Coś mi nie działa twoja konfiguracja.

Ale udało mi się dojść do alternatywnego rozwiązania:

rule_name=$(uci add network interface) 
uci rename network.$rule_name='vpn'
uci set network.@interface[-1].device='br-vpn'
uci set network.@interface[-1].proto='static'
uci set network.@interface[-1].ipaddr='192.168.33.4'
uci set network.@interface[-1].netmask='255.255.255.0'
uci set network.@interface[-1].gateway='192.168.33.1'

uci add network device
uci set network.@device[-1].name='br-vpn'
uci set network.@device[-1].type='bridge'
uci add_list network.@device[-1].ports='eth0'

uci set network.wg0=interface
uci set network.wg0.proto='wireguard'
uci set network.wg0.private_key='xxx='
uci set network.wg0.dns='xxx'
uci add_list network.wg0.addresses='10.14.0.2/16'

uci add network wireguard_wg0
uci set network.@wireguard_wg0[-1].public_key='xxx='
uci set network.@wireguard_wg0[-1].route_allowed_ips='0'
uci add_list network.@wireguard_wg0[-1].allowed_ips='0.0.0.0/0'
uci set network.@wireguard_wg0[-1].endpoint_host='x.x.x.x'
uci set network.@wireguard_wg0[-1].endpoint_port='51820'
uci set network.@wireguard_wg0[-1].persistent_keepalive='25'
uci set network.@wireguard_wg0[-1].description='xxx'

uci add network rule
uci set network.@rule[-1].src='192.168.33.0/24'
uci set network.@rule[-1].lookup='allwg'

uci add network route
uci set network.@route[-1].target='0.0.0.0'
uci set network.@route[-1].netmask='0.0.0.0'
uci set network.@route[-1].table='allwg'
uci set network.@route[-1].interface='wg0'

uci add network route
uci set network.@route[-1].target='x.x.x.x' # taki jak endpoint_host, bez tego działa dokładnie co drugi ping
uci set network.@route[-1].netmask='255.255.255.255'
uci set network.@route[-1].gateway='192.168.33.1'
uci set network.@route[-1].table='allwg'
uci set network.@route[-1].interface='vpn'

uci add firewall zone
uci set firewall.@zone[-1].name='wg0'
uci set firewall.@zone[-1].network='wg0'
uci set firewall.@zone[-1].input='REJECT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='ACCEPT'
uci set firewall.@zone[-1].masq='1'
uci set firewall.@zone[-1].mtu_fix='1'

uci add firewall zone
uci set firewall.@zone[-1].name='vpn'
uci set firewall.@zone[-1].network='vpn'
uci set firewall.@zone[-1].input='ACCEPT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='ACCEPT'

uci add firewall forwarding
uci set firewall.@forwarding[-1].src='lan'
uci set firewall.@forwarding[-1].dest='wg0'

uci add firewall forwarding
uci set firewall.@forwarding[-1].src='vpn'
uci set firewall.@forwarding[-1].dest='wg0'

uci set dhcp.lan.ignore=1
uci add dhcp dhcp
uci set dhcp.@dhcp[-1].interface='vpn'
uci set dhcp.@dhcp[-1].ignore='1'

echo '100 allwg' >> /etc/iproute2/rt_tables

echo 'ip route add 192.168.33.0/24 dev br-vpn scope link src 192.168.33.4 table allwg' > /etc/rc.local 
echo 'exit 0' >> /etc/rc.local

Niestety reguły z rc.local nie potrafię zapisać w configu - trudno, będę z tym żyć.