我想要将来自客户端的所有流量从(192.168.1.0/24)
openwrt 网关转发(0.0.0.0/0)
到服务器 openvpn 隧道。
服务器有一个 openvpn 隧道。它还设置了选项:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
net.ipv4.ip_forward=1
tun0 is the default gateway
Openwrt 是 Internet 的默认网关。因此,如果我手动将客户端的默认网关更改为服务器 IP 192.168.1.2
,它就可以正常工作。
+------------+
| INTERNET |
+------|-----+
|
|
|
+--------|-------+
| OpenWRT |
| |
| 192.168.1.1/24 |
+---|----|-------+
| |
| | +-------------+
| | | Server |
| | | |
+---------------+ | |--------192.168.1.2 |
| Client | | | | |
| ----+ +-------|tun0 |
| 192.168.1.101 | | |
+---------------+ +-------------+
我尝试了什么?
标记除来自服务器的数据包之外的所有数据包:
iptables -t mangle -I PREROUTING -i br-lan '!' -s 192.168.1.2 -d 0.0.0.0/0 -j MARK --set-mark 1
然后通过新的路由表路由它们,该路由表有默认路由,192.168.1.2
但没有成功。流量滞留在路由器中。
ip route add default via 192.168.1.2 table vpn
ip rule add fwmark 1 lookup vpn
我的解决方案
实际上,当我写这篇文章时,我意识到我可以在 dnsmasq 路由器上使用 dhcp-option=3,192.168.1.2 来向所有客户端发送首选网关。而且它有效 :) 这可能是最好的解决方案。但是,是否可以使用 iptables 和 openwrt 端的路由来路由所有流量?