我希望在我的 Apache 服务器的所有端口(传入端口 80 除外)上启用 VPN。我的计算机通过 Ubuntu 上的 openvpn 连接到未连接到 VPN 的路由器。这是每个设备的 VPN 连接。
首先,我检查是否禁用反向路径过滤。我用这个检查了所有的 rp_filter
sysctl -a | grep \\.rp_filter
并禁用它们:
sudo sysctl -w net.ipv4.conf.eth0.rp_filter=0
sudo sysctl -w net.ipv4.conf.tun0.rp_filter=0
etc..
我查看了VPN断开连接时的主IP路由表:
ip route
它返回给我这个:
default via 192.168.2.1 dev eth0 proto static
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.20 metric 1
因此,出于测试目的,我将传出端口 80 和 443 与 whatismyip.com 或类似的网站结合使用。
sudo iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 2
sudo iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 2
sudo ip rule add fwmark 2 table 2
ip route flush cache
然后创建一个表,其中包含与 VPN 断开时完全相同的连接
sudo ip route add 192.168.2.0/24 table 2 dev eth0 proto kernel scope link src 192.168.2.20 metric 1
sudo ip route add default table 2 via 192.168.2.1 dev eth0 proto static
到目前为止还没有结果 :(。我正在使用 SSL 上的加密 VPN。它从不绕过 VPN。
有人能帮我解决这个问题吗?看来我的端口过滤根本不起作用,而且没有进入我的查找表 2。如果我的表 2 是空的,一切仍然可以在端口 80 上工作。
有没有更好的方法来调试 PREROUTING 数据包并检查它们是否真的被标记?
编辑:经过进一步研究,似乎内核中的 CONFIG_IP_ROUTE_FWMARK 配置在 Ubuntu 上不可用,这是必需的 :(......
答案1
我终于找到了!它隐藏在内核参数中。
标记数据包不起作用,但内核 3.16+ 中的新内核选项可以使其工作:sysctl -w net.ipv4.tcp_fwmark_accept=1
http://themediaserver.com/bypass-vpn-connections-via-specifics-ports/
谢谢!