Iptables 将特定 TCP/UDP 端口重定向到 VPN (tun1)

Iptables 将特定 TCP/UDP 端口重定向到 VPN (tun1)

我有一个基于 Linux 的路由器,并设置了一个 VPN 客户端,以根据 iptables 命令通过 VPN 和 isp 路由流量,我试图仅通过 VPN 路由特定的 tcp 和所有 udp 端口​​,并使用 tcpdump 进行验证,但我似乎无法得到它在这里工作是我一直在使用的代码

iptables -t mangle -A PREROUTING -i br0 -p tcp -m multiport --dport ! 20,21,22,80,81,443,8080 -j MARK --set-mark 2

iptables -t mangle -A PREROUTING -i br0 -p udp -j MARK --set-mark 2

其中“2”是 VPN 表(在我的例子中是表 10),“1”是 ISP 表(表 100)

该脚本具有其他与路由相关的功能,可以正常工作以将特定 IP 移动到 VPN 和终止开关

这个概念是我试图在路由器本身(内部“lan”192.168.1.1)上运行Torrent客户端,并且我希望上面未列出的所有udp和每个tcp端口都使用VPN,而其余的则通过isp

我被告知我可能还需要使用“输入输出”和“转发”选项,但尽管阅读了内容,我似乎无法正确路由端口,我的脚本要么最终挂起并使路由器崩溃,要么最终完全没有流量通过 VPN 或 ISP 连接到互联网

这是我的脚本,没有端口部分,因为我出于沮丧而将其删除

#!/bin/sh

main() {

for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
  echo 0 > $i
done

ip route flush table 100

ip rule del fwmark 1 table 100

ip route del default table 100

ip rule del fwmark 2 table 10

ip route flush cache

iptables -t mangle -F INPUT

iptables -t mangle -F OUTPUT

iptables -t mangle -F FORWARD

iptables -t mangle -F PREROUTING

iptables -t mangle -F POSTROUTING

iptables -t mangle -F

ip route show table main | grep ^default | grep -Ev tun1 \
  | while read ROUTE ; do
      ip route add table 100 $ROUTE
done

ip route add default table 100 via 
$(nvram get wan_gateway)

ip rule add fwmark 1 table 100

ip rule add fwmark 2 table 10

ip route flush cache
}

int() {
iptables -t mangle -A PREROUTING -i "$1" -j MARK --set-mark 1
}

adr() {
iptables -t mangle -A PREROUTING -i br0 -s "$1" -j MARK --set-mark 2
}

kills() {
iptables -I FORWARD -s "$1" -o eth0 -j DROP
}

main

int br0

adr 192.168.1.115/32

adr 192.168.1.119/32

adr 192.168.1.147/32

kills 192.168.1.115/32

kills 192.168.1.119/32

kills 192.168.1.147/32

exit 0

我的路由器设置为默认通过 isp 而不是 vpn 进行流量传输

答案1

理解这一点的一个关键是,进出路由器主机的数据包采用的路径iptables与经过路由器的数据包所经过的路径不同。您可以谷歌iptables-chains.png并跟进一些图像,例如,http://jensd.be/wp-content/uploads/iptables_chains.png

概览图片位于http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1002061/10822f1.png对于制定规则也很有帮助iptables

具体来说,PREROUTING该表的链表mangle只适用于传入数据包,这适用于转发数据包(远程到远程),而您希望将传出数据包定向到路由器的本地到远程流量。因此,上面的初始规则设置应该针对OUTPUT表链mangle,以便引导本地到远程的流量。

相关内容