Wireguard Tunnel - Routing problem

I would like to use my openwrt travel router to (1) channel all IP traffic home; and (2) connect the wifi subnet on my travel router with the subnets at home. I have some routing problem here, it seems:

My travelrouter (192.168.168.1) spans up wifi 192.168.168.0/24 for wifi clients. Works.
I have built up a wireguard tunnel to my home server (internal IP 192.168.1.114). The tunnel addresses are 10.7.0.1 (home server) and 10.7.0.2 (travel router). This tunnel gets established.
From the travel router, I can ping 10.7.0.2, 10.7.0.1, and 192.168.1.114. From the home server, I can ping 192.168.1.114, 10.7.0.1, but neither 10.7.0.2 nor 192.168.168.1. Also, the travel router can connect to the world (e.g., ping www.google.com).

Wifi clients cannot ping anything outside of 192.168.168.0/24 and 10.7.0.2. All other pings (internal, i.e. 10.7.0.1 and 192.168.168.114 as well as the world - e.g. 8.8.8.8) time out.

When I stop the wireguad tunnel, routing for the travel router and Wifi clients to the world works again.

I guess I am missing someting in the routing, possibly a static (default) route which only applies when the wireguard tunnel is up? How to do this?

Thanks for any pointers!

# cat /etc/config/network

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

config globals 'globals'
	option ula_prefix 'fddb:9b14:2d7f::/48'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth0.1'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option netmask '255.255.255.0'
	option ip6assign '60'
	option ipaddr '192.168.168.1'

config interface 'wan'
	option device 'eth0.2'
	option proto 'dhcp'

config interface 'wan6'
	option device '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 '2 3 0t'

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

config interface 'trm_wwan'
	option proto 'dhcp'
	option metric '100'

config interface 'trm_wwan6'
	option device '@trm_wwan'
	option proto 'dhcpv6'

config interface 'wg0'
	option proto 'wireguard'
	option private_key 'REDACTED'
	list addresses '10.7.0.2'
	list addresses '192.168.168.0/24'

config wireguard_wg0
        option description 'WireguardHome'
	option public_key 'REDACTED'
	option endpoint_host 'gateway.example.com'
	list allowed_ips '0.0.0.0/0'
	option endpoint_port '51820'
	option route_allowed_ips '1'
        option persistent_keepalive '25'
# cat /etc/config/firewall

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

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

config zone
	option name 'wan'
	list network 'wan'
	list network 'wan6'
	list network 'trm_wwan'
	list network 'trm_wwan6'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option masq '1'
	option mtu_fix '1'

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

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 'fc00::/6'
	option dest_ip 'fc00::/6'
	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 rule
	option name 'Allow-IPSec-ESP'
	option src 'wan'
	option dest 'lan'
	option proto 'esp'
	option target 'ACCEPT'

config rule
	option name 'Allow-ISAKMP'
	option src 'wan'
	option dest 'lan'
	option dest_port '500'
	option proto 'udp'
	option target 'ACCEPT'

config rule
	option name 'Support-UDP-Traceroute'
	option src 'wan'
	option dest_port '33434:33689'
	option proto 'udp'
	option family 'ipv4'
	option target 'REJECT'
	option enabled 'false'

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

config zone
	option name 'wg0'
	option network 'wg0'
	option output 'ACCEPT'
	option forward 'REJECT'
	option input 'REJECT'

config forwarding
	option src 'wg0'
	option dest 'lan'

config forwarding
	option src 'wg0'
	option dest 'wan'

config forwarding
	option src 'lan'
	option dest 'wg0'

Do not do this, as that network is already on the LAN.

In the server config, you would need to include the travel router's LAN as allowed_ips.

Check the travel router's routing table after wireguard is started, you should see two /128 networks effectively directing all IPs into the wg tunnel. And there will be a single host route to the wireguard peer, which needs to go by regular WAN. The forwarding from wg0 to wan never happens so you should remove that.

2 Likes

Ok, removed the list addresses for 192.168.168.0/24 and added these as allowed_ips on the server (shouldn't be required, as the server has a static route for 192.168.168.0/24, right?)

I also removed the one forward rule. Then rebooted, reconnected. No change in connectivity.

Routing table on travel router (can't see the /128 networks...):

# ip route show table all
default dev wg0 scope link 
default via 172.20.10.1 dev wlan1  src 172.20.10.2  metric 100 
93.206.47.88 via 172.20.10.1 dev wlan1  metric 100 
172.20.10.0/28 dev wlan1 scope link  metric 100 
192.168.168.0/24 dev br-lan scope link  src 192.168.168.1 
local 10.7.0.2 dev wg0 table local scope host  src 10.7.0.2 
broadcast 127.0.0.0 dev lo table local scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo table local scope host  src 127.0.0.1 
local 127.0.0.1 dev lo table local scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo table local scope link  src 127.0.0.1 
broadcast 172.20.10.0 dev wlan1 table local scope link  src 172.20.10.2 
local 172.20.10.2 dev wlan1 table local scope host  src 172.20.10.2 
broadcast 172.20.10.15 dev wlan1 table local scope link  src 172.20.10.2 
broadcast 192.168.168.0 dev br-lan table local scope link  src 192.168.168.1 
local 192.168.168.1 dev br-lan table local scope host  src 192.168.168.1 
broadcast 192.168.168.255 dev br-lan table local scope link  src 192.168.168.1 
default from 2a01:598:88b0:4561::/64 via fe80::84ad:8dff:fead:5e64 dev wlan1  metric 512 
2a01:598:88b0:4561::/64 dev wlan1  metric 256 
unreachable 2a01:598:88b0:4561::/64 dev lo  metric 2147483647 
fddb:9b14:2d7f::/64 dev br-lan  metric 1024 
unreachable fddb:9b14:2d7f::/48 dev lo  metric 2147483647 
fe80::/64 dev eth0  metric 256 
fe80::/64 dev eth0.2  metric 256 
fe80::/64 dev br-lan  metric 256 
fe80::/64 dev wlan0  metric 256 
fe80::/64 dev wlan1  metric 256 
fe80::/64 dev wlan1-1  metric 256 
local ::1 dev lo table local  metric 0 
anycast 2a01:598:88b0:4561:: dev wlan1 table local  metric 0 
local 2a01:598:88b0:4561:e695:6eff:fe47:685c dev wlan1 table local  metric 0 
anycast fddb:9b14:2d7f:: dev br-lan table local  metric 0 
local fddb:9b14:2d7f::1 dev br-lan table local  metric 0 
anycast fe80:: dev eth0.2 table local  metric 0 
anycast fe80:: dev eth0 table local  metric 0 
anycast fe80:: dev br-lan table local  metric 0 
anycast fe80:: dev wlan0 table local  metric 0 
anycast fe80:: dev wlan1-1 table local  metric 0 
anycast fe80:: dev wlan1 table local  metric 0 
local fe80::e495:6eff:fe47:685c dev wlan1-1 table local  metric 0 
local fe80::e695:6eff:fe47:685c dev eth0.2 table local  metric 0 
local fe80::e695:6eff:fe47:685c dev eth0 table local  metric 0 
local fe80::e695:6eff:fe47:685c dev br-lan table local  metric 0 
local fe80::e695:6eff:fe47:685c dev wlan1 table local  metric 0 
local fe80::e695:6eff:fe47:685d dev wlan0 table local  metric 0 
multicast ff00::/8 dev eth0 table local  metric 256 
multicast ff00::/8 dev br-lan table local  metric 256 
multicast ff00::/8 dev eth0.2 table local  metric 256 
multicast ff00::/8 dev wlan0 table local  metric 256 
multicast ff00::/8 dev wlan1 table local  metric 256 
multicast ff00::/8 dev wlan1-1 table local  metric 256 
multicast ff00::/8 dev wg0 table local  metric 256

Changed network config:

# cat /etc/config/network

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

config globals 'globals'
	option ula_prefix 'fddb:9b14:2d7f::/48'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth0.1'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option netmask '255.255.255.0'
	option ip6assign '60'
	option ipaddr '192.168.168.1'

config interface 'wan'
	option device 'eth0.2'
	option proto 'dhcp'

config interface 'wan6'
	option device '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 '2 3 0t'

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

config interface 'trm_wwan'
	option proto 'dhcp'
	option metric '100'

config interface 'trm_wwan6'
	option device '@trm_wwan'
	option proto 'dhcpv6'

config interface 'wg0'
	option proto 'wireguard'
	option private_key 'REDACTED'
	list addresses '10.7.0.2'

config wireguard_wg0
        option description 'WireguardHome'
	option public_key 'REDACTED'
	option endpoint_host 'gateway.example.com'
	list allowed_ips '0.0.0.0/0'
	option endpoint_port '51820'
	option route_allowed_ips '1'
        option persistent_keepalive '25'

changed firewall config:

# cat /etc/config/firewall

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

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

config zone
	option name 'wan'
	list network 'wan'
	list network 'wan6'
	list network 'trm_wwan'
	list network 'trm_wwan6'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option masq '1'
	option mtu_fix '1'

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

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 'fc00::/6'
	option dest_ip 'fc00::/6'
	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 rule
	option name 'Allow-IPSec-ESP'
	option src 'wan'
	option dest 'lan'
	option proto 'esp'
	option target 'ACCEPT'

config rule
	option name 'Allow-ISAKMP'
	option src 'wan'
	option dest 'lan'
	option dest_port '500'
	option proto 'udp'
	option target 'ACCEPT'

config rule
	option name 'Support-UDP-Traceroute'
	option src 'wan'
	option dest_port '33434:33689'
	option proto 'udp'
	option family 'ipv4'
	option target 'REJECT'
	option enabled 'false'

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

config zone
	option name 'wg0'
	option network 'wg0'
	option output 'ACCEPT'
	option forward 'REJECT'
	option input 'REJECT'

config forwarding
	option src 'wg0'
	option dest 'lan'

config forwarding
	option src 'lan'
	option dest 'wg0'

For the sake of completeness:

# ip address show; ip route show table all
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP qlen 1000
    link/ether e4:95:6e:47:68:5c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::e695:6eff:fe47:685c/64 scope link 
       valid_lft forever preferred_lft forever
6: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether e4:95:6e:47:68:5c brd ff:ff:ff:ff:ff:ff
    inet 192.168.168.1/24 brd 192.168.168.255 scope global br-lan
       valid_lft forever preferred_lft forever
    inet6 fddb:9b14:2d7f::1/60 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::e695:6eff:fe47:685c/64 scope link 
       valid_lft forever preferred_lft forever
7: eth0.1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-lan state UP qlen 1000
    link/ether e4:95:6e:47:68:5c brd ff:ff:ff:ff:ff:ff
8: eth0.2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether e4:95:6e:47:68:5c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::e695:6eff:fe47:685c/64 scope link 
       valid_lft forever preferred_lft forever
11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-lan state UP qlen 1000
    link/ether e4:95:6e:47:68:5d brd ff:ff:ff:ff:ff:ff
    inet6 fe80::e695:6eff:fe47:685d/64 scope link 
       valid_lft forever preferred_lft forever
20: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether e4:95:6e:47:68:5c brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.2/28 brd 172.20.10.15 scope global wlan1
       valid_lft forever preferred_lft forever
    inet6 2a01:598:88b0:4561:e695:6eff:fe47:685c/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::e695:6eff:fe47:685c/64 scope link 
       valid_lft forever preferred_lft forever
21: wlan1-1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-lan state UP qlen 1000
    link/ether e6:95:6e:47:68:5c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::e495:6eff:fe47:685c/64 scope link 
       valid_lft forever preferred_lft forever
22: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN qlen 1000
    link/[65534] 
    inet 10.7.0.2/32 brd 255.255.255.255 scope global wg0
       valid_lft forever preferred_lft forever

Add the netmask.
Make sure that the home router has proper settings. We don't see any config here.

3 Likes

Thanks, I believe the firewall 'option input 'REJECT'' from wg0 killed it for me before - good catch! Having changed that to ACCEPT (and having added the netmask), it now works for me.

For future reference for anybody coming across a similar problem, this is the config working for me:

root@OpenWrt:/etc/config# cat firewall

[...]

config zone
	option name 'wg0'
	option network 'wg0'
	option output 'ACCEPT'
	option forward 'REJECT'
	option input 'ACCEPT'

config forwarding
	option src 'wg0'
	option dest 'lan'

config forwarding
	option src 'lan'
	option dest 'wg0'
root@OpenWrt:/etc/config# cat network

[...]

config interface 'wg0'
	option proto 'wireguard'
	option private_key 'REDACTED'
	list addresses '10.7.0.2/32'

config wireguard_wg0
        option description 'WireguardHome'
	option public_key 'REDACTED'
	option endpoint_host 'gateway.example.com'
	list allowed_ips '0.0.0.0/0'
	option endpoint_port '51820'
	option route_allowed_ips '1'
        option persistent_keepalive '25'

And this is the related peer (home server, running Ubuntu) config for Wireguard:

[Interface]
Address = 10.7.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = REDACTED

[Peer]
PublicKey = REDACTED
AllowedIPs = 10.7.0.2/32, 192.168.168.0/24

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.