看懂wire-guard的路由设置
如果peer的allowed-ips设置了0.0.0.0/0,即视wg接口为默认网关,wg-quic会自动添加两条路由。
$ ip rule
0: from all lookup local
32764: from all lookup main suppress_prefixlength 0
32765: not from all fwmark 0xca6c lookup 51820
32766: from all lookup main
32767: from all lookup default
“from all lookup main suppress_prefixlength 0”的意思是说“请忽略默认网关,但是保留直连的内网”。如果是直连的内网地址,直接就会返回了,不会继续往下走了。
“not from all fwmark 0xca6c lookup 51820”的意思是说,满足条件“from all fwmark 0xca6c“(wireguard发出的都带fwmark 0xca6c )请忽略本条规则,继续往下走,即peer的endpoint地址会走main路。否则,请使用51820路由表,通过wg隧道出去。
之前的常规做法是对peer的endpoint做特殊处理,如果endpoint总是变就很麻烦,而通过fwmark就解决了这个问题。
“from all lookup main suppress_prefixlength 0”这条规则很重要,否则所有非local的地址,包括内网直连的ip也会走wg隧道,就会导致内网无法连接。
$ ip route show table 51820
default dev wg0 scope link
$ ip route show table main
default via 192.168.1.1 dev eth0 src 192.168.1.5 metric 202
10.10.0.0/24 dev wg0 proto kernel scope link src 10.10.0.2
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.5 metric 202
https://www.wireguard.com/netns/
原文时间:2018.12