![如何排除 ftp 流量通过 vpn 路由?](https://linux22.com/image/1147285/%E5%A6%82%E4%BD%95%E6%8E%92%E9%99%A4%20ftp%20%E6%B5%81%E9%87%8F%E9%80%9A%E8%BF%87%20vpn%20%E8%B7%AF%E7%94%B1%EF%BC%9F.png)
我正在使用 openvpn 和网络管理器连接到 ghostvpn,一切正常,但我想从 vpn 连接中排除所有 ftp 流量,因为我需要更快的上传/下载速度。到目前为止,我在上传和下载时必须断开与 vpn 服务器的连接 - 这不是一个好的解决方案 ;)
我该怎么做?或者也许 filezilla 中有一个选项?
提前致谢!
塞巴斯蒂安
答案1
你可以ftp
使用以下方式直接路由到互联网iptables
这里我们将采用ftp
来进行路由。使用mangle
表来iptables
修改ftp
数据包。
sudo iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark 0x1
我们将所有目标端口的数据包标记21
为0x1
。
现在保存并重新启动iptables
。
sudo service iptables save
sudo service iptables restart
/etc/iproute2/rt_tables
接下来,只需输入一个条目即可创建一个新的 IP 路由表
100 ftptable
为数据包编写规则ftp
。
ip rule add fwmark 0x1 lookup ftptable
在新表中添加路由ftptable
。如果 VPN 设置为默认网关,则所有其他流量都将通过 VPN,这可以通过ip route show
命令看到。
第一次连接到 vpn 时执行此操作。
我们从主表复制除默认网关条目之外的所有条目。
sudo ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table ftptable $ROUTE; done
将数据包的默认网关条目添加ftp
到表中ftptable
sudo ip route add default dev <your_interface> table ftptable
your_interfrace
命令是您通常的 wifi 或 eth 接口,当您未连接到互联网时访问互联网。
使用ip route show table ftptable
显示 所有路线ftptable
。
编辑1
第二种方式
/etc/iproute2/rt_tables
通过附加以下行来编辑并添加新表:
100 ftptable
ftptable
配置以默认网关命名的新路由表,并创建规则以有条件地将流量发送到该表。
ip route add default via <usual_gw_ip> dev <your_int> table ftptable
ip rule add fwmark 0x1 table ftptable
您最终的注释脚本将如下所示:
# Populate secondary routing table
ip route add default via <usual_gw_ip> dev <your_int> table ftptable
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table ftptable
# Mark these packets so that iproute can route it through ftptable
iptables -A OUTPUT -t mangle -o <your_int> -p tcp --dport 21 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o <your_int> -p tcp --dport 21 -j SNAT --to <your_local_ip>
尝试。
编辑2
当您连接到 vpn 时,我猜所有流量都会通过它们。在您的路由表中,您将看到tun0
接口的默认网关。只需添加路由即可将流量路由到 ftp 服务器到不同的接口/ip
ip route add <your_ftp_server_ip/32> dev <your_exit_int>
<your_exit_int> - represent not tun interface example: eth0, ens160, ...