我的问题很简单,但我在网上找不到一个干净的step_by_step指南/例子。我有一个OpenVPN代理服务器,我只想通过它路由本地Ubuntu机器的web流量,我知道我们可以通过OpenVPN通过client.config(这里)路由特定的目的地(IP或网络)。但是对于特定的流量,比如web(80/443),我知道我应该将route-nopull添加到client.config中,并通过标记web流量并将其路由到OpenVPN网关来添加一些iptables规则,但我不知道如何做到这一点。任何建议都会有很大帮助。
发布于 2016-06-02 08:38:24
使用基于规则的策略路由。
Netfilter将在数据包中添加标记:
iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x1然后,应该告诉Linux,如果它看到了这个标记,它应该使用备用路由表:
ip rule add fwmark 0x1 lookup 201你需要在桌子上找到一条路线:
ip route add default via [your-openvpn-peer-address] table 201注意,您仍然可以通过非标准端口和DNS查询进行跟踪。使用相同的方法也可以轻松地路由所有或部分--只需添加更多的netfilter标记规则即可。
您还可以使用符号别名而不是内核表号。
echo "201 route-via-vpn" >> /etc/iproute2/rt_tables然后使用“路由-通过-vpn”表名代替所有ip子命令中的编号: ip规则添加.查找路由-通过vpn,ip路由添加.表路由-通过-vpn。
可能需要在隧道建立后自动运行netfilter、ip规则和ip路由命令,并在关闭时运行反向命令(iptables -D、ip规则删除或ip路由删除)。这可以通过OpenVPN脚本来完成。
设置OpenVPN对等点来转发数据包是由您自己决定的。
发布于 2016-06-04 02:34:39
谢谢你以上的回答,但对我有用的是:
iptables -t mangle -A OUTPUT -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sysctl -w net.ipv4.conf.tun0.rp_filter=2
ip rule add fwmark 0x1 lookup 201
ip route add default dev tun0 table 201https://serverfault.com/questions/780359
复制相似问题