![如何通过第二个接口路由 BitTorrent?](https://linux22.com/image/54954/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%8E%A5%E5%8F%A3%E8%B7%AF%E7%94%B1%20BitTorrent%EF%BC%9F.png)
我已成功在 DD-WRT 路由器上配置 openvpn,使隧道启动并正常工作,但它根本不会干扰路由(默认配置希望所有流量都通过它)。
我想将 tun1 上的端口 51413 端口转发到我的网络上的特定主机 (192.168.77.145)。
我还需要伪装端口 6881-6890,以便它们通过 tun1 路由。我知道这涉及到数据包修改/标记,以及手动设置路由,但自从我考虑过 iptables 以来已经过去了 12 年(我想我当时仍然有拨号)。
互联网上是否有一些我没有绊倒的食谱?
[编辑]
我一直在尝试 tcpdump,看来我使用的客户端(OSX 上的传输)有一个奇怪的功能:它使用 51413(用户可配置)作为所有传出数据包的源端口,以及所有传入数据包的目的地。即使当我在 tcpdump 中查找端口 6881-6889 时,这些端口始终是远程端的源端口,并且始终被发送到 51413。
所以这比我想象的要简单得多。我只需要通过 tun1 接口路由/伪装具有该 src 端口号的任何内容。
我认为 iptables 规则可能类似于以下内容:
# mark bittorrent packets
iptables -t mangle -A OUTPUT -p udp --sport 51413 -j MARK --set-mark 7
iptables -t mangle -A OUTPUT -p tcp --sport 51413 -j MARK --set-mark 7
# allow responses
iptables -A INPUT -i tun1 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# allow bittorrent
iptables -A INPUT -i tun1 -p udp --dport 51413 -j ACCEPT
iptables -A INPUT -i tun1 -p tcp --dport 51413 -j ACCEPT
# block everything incoming on vpn
#iptables -A INPUT -i tun1 -j REJECT
# masquerading
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
这些看起来正常吗?仍然不知道路由规则。
[编辑2]
我认为 -A 是错误的,因为这会将其附加到 iptables 规则的末尾。我的路由器首先添加天知道什么,如果这些规则匹配,这些规则将被忽略。我很确定他们都应该是-I。
即使有了这样的改变,我也无法让任何事情发挥作用。
这些数据包显示在我的专用网络上的 br0(桥接接口)上。如果我不做任何更改,DD-WRT 配置将通过 vlan2 进行 NAT。当然,OpenVPN 的接口是 tun1(我想通过该接口发送 bt 流量)。
[编辑3]
最初的两个 iptables 语句是错误的。我正在研究作者使用他的台式机作为路由器的示例(我认为),因此这与通过本地网络将数据包发送到具有两个外部接口的路由器的台式机不同。正确的语句集是这样的:
# routing table setup
ip route replace default via $VPNGW dev tun1 table 100
ip rule add fwmark 7 table 100
# mark bittorrent packets
iptables -t mangle -I PREROUTING -p udp --sport 51413 -j MARK --set-mark 7
iptables -t mangle -I PREROUTING -p tcp --sport 51413 -j MARK --set-mark 7
# allow responses
iptables -A INPUT -i tun1 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# allow bittorrent
iptables -A INPUT -i tun1 -p udp --dport 51413 -j ACCEPT
iptables -A INPUT -i tun1 -p tcp --dport 51413 -j ACCEPT
# block everything incoming on vpn
iptables -A INPUT -i tun1 -j REJECT
# masquerading
iptables -t nat -I POSTROUTING -o tun1 -j MASQUERADE
这仍然不完美。现在,大部分 bt 流量都通过 tun1,但我仍然在 vlan2 上看到 51413 的传入数据包。我不清楚为什么会发生这种情况。