除了我的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上不可用,这是必需的:(.
发布于 2015-01-20 06:16:40
我终于找到了!它隐藏在内核参数中。
标记数据包不起作用,但是在内核3.16+中使用一个新的内核选项使其工作: sysctl -w net.ipv4.tcp_fwmark_accept=1
http://themediaserver.com/bypass-vpn-connections-via-specifics-ports/
谢谢!
https://askubuntu.com/questions/573567
复制相似问题