我有一个 ubuntu 服务器,用于通过 VPN 从互联网获取某些文件。我已使用 PPP0 设置 VPN,目前调整路由如下:
sudo route add default ppp0
通过 vpn 连接一切都运行正常,但现在我想通过 eth0 而不是 VPN 来路由 FTP 流量。
我试过
sudo route add default eth0
在此期间,我一直在使用 FTP,但失去了互联网连接,直到
ifdown eth0 ifup eth0
被称为。
显然我做错了什么。
如果容易的话,理想的解决方案是始终通过 eth0 路由所有 FTP,如果不容易,那么我应该在 bash 脚本中添加什么内容,以便在 FTP 上传完成时将流量路由回 eth0(此时我可以返回路由添加默认 ppp0)。
答案1
你想要的是基于策略的路由。Google 会返回大量有关此主题的信息,而且在 ServerFault 回答帖子中无法完全回答这个问题,这太复杂了。
从一万英尺高空俯瞰,您可以:
- 在内核中创建额外的路由表。
- 配置每个路由表以使用不同的默认路由(一个用于正常连接,一个用于 VPN)。
- 使用 iptables,
mark
根据您的规则/策略识别每个数据包。 - 分配您在步骤 3 中使用的标记,以告诉内核对每个数据包使用哪个路由表。
实现此目的的最基本命令:
echo 200 novpn >> /etc/iproute2/rt_tables
ip route add table 200 default via 192.0.2.1
iptables -t mangle -I OUTPUT -p tcp --dport 21 -d server.example.com -j MARK --set-mark 200
ip rule add fwmark 200 table novpn
将 192.0.2.1 替换为您本地网络上的默认路由器。