OpenVPN -> 特定端口上的 SSL 绕过 VPN

OpenVPN -> 特定端口上的 SSL 绕过 VPN

我希望在我的 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/

谢谢!

相关内容