我的网络上有以下工作设置:
A. ISP-Router (连接到 inet, 内部 ip 192.168.0.1 ) <----> B. eth0 - OpenWrt 路由器 (OpenVPN 客户端运行) br-lan (bridge eth1 + wlan0, ip 192.168.1.0) <-- --> C.多个客户端
这个想法是所有客户端连接都通过 B. B 通过 VPN 路由所有内容。如果 VPN 连接中断,客户端将无法再访问 Internet。因此,如果 vpn 连接出现问题,我会防止客户端暴露自己。
我的 OpenWrt 路由器设置取自这里:https ://blog.ipredator.se/howto/openwrt/configuring-openvpn-on-openwrt.html
总结一下:
1 相关设备:
root@OpenWrt:~# ifconfig
br-lan Link encap:Ethernet
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
eth0 Link encap:Ethernet
inet addr:192.168.0.16 Bcast:192.168.0.255 Mask:255.255.255.0
tun0 Link encap:UNSPEC
inet addr:10.33.197.41 P-t-P:10.33.197.41 Mask:255.255.0.0
2 个相关的防火墙区域:
config zone
option name 'lan'
option network 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'REJECT'
config zone
option name 'wan'
option output 'ACCEPT'
option forward 'REJECT'
option network 'wan'
option input 'ACCEPT'
config zone
option name 'vpn'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'vpn'
config forwarding
option dest 'vpn'
option src 'lan'
3 路由表如下所示:
root@OpenWrt:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.33.0.1 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
10.33.0.0 0.0.0.0 255.255.0.0 U 0 0 0 tun0
46.122.122.89 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.33.0.1 128.0.0.0 UG 0 0 0 tun0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan
到目前为止,此设置的所有内容都可以正常工作。但是,现在我想绕过特定 IP/主机的 vpn。因此,即使在 vpn 断开连接时也可以使用它们。我的想法是为这些 IP 添加直接通过 A (ip rule add ...) 的路由。这不起作用,因为我似乎还必须调整我的防火墙设置。不幸的是,阅读 iptables 的基础知识并没有让我明白要进行哪些更改。
/edit:尝试并进一步研究,我认为理论上有两种解决方案。但是,我不知道如何使它们工作:
保持上述概念,我需要:
- 为我的 wan_zone 添加 MASQUERADE(我这样做了)
- 添加从 lan 到 wan 和从 wan 到 lan 的 FORWARD 规则(我可以这样做,但随后我失去了“vpn 故障保护”),这些规则取决于我要访问的 IP(我不知道是否以及如何访问)作品)
改变概念并摆脱 iptables 而是使用 iproute2 和基于策略的路由(http://www.linupedia.org/opensuse/Policy_Based_Routing)
- 默认情况下,仅通过 vpn 路由所有内容
- 有条件地通过 A. 直接路由特定 IP
但是,这似乎更加复杂,至少对我来说是这样,因为我从未使用过它。