通过 SOCKS 代理重定向来自 eth1 和 eth2 的所有数据包

Tim*_*olf 8 routing proxy socks tor

有没有办法重定向所有流量,UDP 和 TCP,通过 SOCKS 代理(Tor)进出 eth1 和 eth2,然后通过 eth0 传递它?

eth0: Internet in - 连接到主路由器,然后是电缆调制解调器

eth1:设置为调制解调器的 USB 以太网端口(我认为这就是我要找的词,对吧?)

eth2:作为 WiFi 热点的 USB WiFi 天线设置

我可以使用 iptables 之类的东西直接通过 Tor 路由,还是需要像 Privoxy 这样的适配器?

phe*_*mer 9

首先,您需要tun2socks(通常是“badvpn”包的一部分)。tun2socks 设置了一个虚拟接口,您可以通过该接口路由流量,并且该流量将通过目标袜子代理发送。

设置它有点棘手,因为您只想通过隧道路由某些流量。

这个脚本应该做你想做的:

#!/bin/bash
socks_server=127.0.0.1:8080

id="$RANDOM"
tun="$(printf 'tun%04x' "$id")"
ip tuntap add dev $tun mode tun
ip link set $tun up
ip addr add 169.254.1.1/30 dev $tun
sysctl -w net.ipv4.conf.$tun.forwarding=1
ip rule add fwmark $id lookup $id
ip route add default via 169.254.1.2 table $id
iptables -t mangle -I PREROUTING -i eth1 -p tcp -j MARK --set-mark $id
iptables -t mangle -I PREROUTING -i eth2 -p tcp -j MARK --set-mark $id
badvpn-tun2socks --tundev $tun --netif-ipaddr 169.254.1.2 --netif-netmask 255.255.255.252 --socks-server-addr $socks_server

iptables -t mangle -D PREROUTING -i eth2 -p tcp -j MARK --set-mark $id
iptables -t mangle -D PREROUTING -i eth1 -p tcp -j MARK --set-mark $id
ip route del default via 169.254.1.2 table $id
ip rule del from fwmark $id lookup $id
ip tuntap del dev $tun mode tun
Run Code Online (Sandbox Code Playgroud)

解释:

socks_server=127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)

这是我们将使用的袜子服务器。
 

id="$RANDOM"
tun="$(printf 'tun%04x' "$id")"
Run Code Online (Sandbox Code Playgroud)

这些会生成一个随机 ID 用于隧道。由于系统上可能有其他隧道,我们不能只使用tun0tun1。99% 的情况下这会正常工作。不过要相应调整。
 

ip tuntap add dev $tun mode tun
ip link set $tun up
ip addr add 169.254.1.1/30 dev $tun
sysctl -w net.ipv4.conf.$tun.forwarding=1
Run Code Online (Sandbox Code Playgroud)

这些设置隧道接口时tun2socks会用到。
 

ip rule add fwmark $id lookup $id
ip route add default via 169.254.1.2 table $id
Run Code Online (Sandbox Code Playgroud)

这些创建了一个具有单个规则的路由表,该规则$id通过隧道发送带有防火墙标记(接下来介绍)的任何流量。
 

iptables -t mangle -I PREROUTING -i eth1 -p tcp -j MARK --set-mark $id
iptables -t mangle -I PREROUTING -i eth2 -p tcp -j MARK --set-mark $id
Run Code Online (Sandbox Code Playgroud)

这些设置防火墙标记$id进入的任何 TCP 数据包eth1eth2。我们只想匹配TCP。Socks 无法处理 UDP 或 ICMP(tun2socks 确实有转发 UDP 的方法,但它更复杂,所以我将其排除在外)。
 

badvpn-tun2socks --tundev $tun --netif-ipaddr 169.254.1.2 --netif-netmask 255.255.255.252 --socks-server-addr $socks_server
Run Code Online (Sandbox Code Playgroud)

这将启动 tun2socks。它将坐在前台直到终止。
 

iptables -t mangle -D PREROUTING -i eth2 -p tcp -j MARK --set-mark $id
iptables -t mangle -D PREROUTING -i eth1 -p tcp -j MARK --set-mark $id
ip route del default via 169.254.1.2 table $id
ip rule del from fwmark $id lookup $id
ip tuntap del dev $tun mode tun
Run Code Online (Sandbox Code Playgroud)

这些会拆除我们在设置过程中创建的所有内容。它们只会在badvpn-tun2socks退出时运行。