有没有办法通过 SOCKS 代理 (Tor) 重定向所有进出 eth1 和 eth2 的流量(UDP 和 TCP),然后再通过 eth0 传递?
eth0:互联网输入 - 通向主路由器,然后通向电缆调制解调器
eth1:USB 以太网端口设置为调制解调器(我想这就是我要找的词,对吧?)
eth2:USB WiFi 天线设置为 WiFi 热点
我可以使用 iptables 之类的东西直接通过 Tor 路由它,还是需要像 Privoxy 这样的适配器?
答案1
首先,你需要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
解释:
socks_server=127.0.0.1:8080
这是我们将使用的袜子服务器。
id="$RANDOM"
tun="$(printf 'tun%04x' "$id")"
它们会生成一个用于隧道的随机 ID。由于系统上可能有其他隧道,因此我们不能只使用tun0
or tun1
。 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
这些设置隧道接口tun2socks
都会用到。
ip rule add fwmark $id lookup $id
ip route add default via 169.254.1.2 table $id
它们创建一个具有单个规则的路由表,该规则$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
$id
这些在传入eth1
或 的任何 TCP 数据包上设置防火墙标记eth2
。我们只想匹配 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
这将启动 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
这些会破坏我们在设置过程中创建的所有内容。它们只会在badvpn-tun2socks
退出时运行。
答案2
$ badvpn-tun2socks --tundev $tun --netif-ipaddr 169.254.1.2 \
--netif-netmask 255.255.255.252 --socks-server-addr $socks_server \
--udpgw-transparent-dns
笔记:您必须添加--udpgw-transparent-dns
DNS 请求。