我有一个 wireguard 接口 wg_vpn,但是我不希望它是全局的,所以我在 wg_vpn.conf 中添加了行“Table = off”以防止 wg-quick 修改路由表。
我还有一个 openvpn/wireguard 接口 tun0/wg0,客户端可以通过它访问我的服务器。我创建了以下 iptables 规则:
iptables -t nat -A POSTROUTING -o wg_vpn -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wg0 -o wg_vpn -j ACCEPT
ip6tables -t nat -A POSTROUTING -o wg_vpn -j MASQUERADE
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i wg0 -o wg_vpn -j ACCEPT
但它们不起作用,除非我通过以下方式将 wg_vpn 设为全局:
ip route add default dev wg_vpn
ip -6 route add default dev wg_vpn
然后他们就开始工作了。
但是我只想将 tun0/wg0 转发到 wg_vpn 而不修改全局路由表,所以我知道如何实现这一点吗?
提前致谢!
答案1
使用策略路由和ip rule
。
不要指定,而是
Table=off
指定Table=123
让 wg-quick 将路由放在单独的表中(除 253-255 之外的任何 16 位数字,它们是全局表)。...或者手动将您的路线添加到新表中:
ip -4 route add default dev wg_vpn table 123 ip -6 route add default dev wg_vpn table 123
创建策略路由规则,为从 tun0 接收的数据包选择此表:
ip -4 rule add pref 1000 iif tun0 lookup 123 ip -6 rule add pref 1000 iif tun0 lookup 123