Routing

通過 SOCKS 代理重定向來自 eth1 和 eth2 的所有數據包

  • September 21, 2016

有沒有辦法通過 SOCKS 代理 (Tor) 重定向所有進出 eth1 和 eth2 的流量,UDP 和 TCP,然後再通過 eth0?

eth0: Internet in - 連接到主路由器,然後是電纜調製解調器

eth1:將 USB 乙太網埠設置為調製解調器(我想這就是我要找的詞,對吧?)

eth2:將 USB WiFi 天線設置為 WiFi 熱點

我可以使用類似 iptables 的東西直接通過 Tor 路由它,還是需要像 Privoxy 這樣的適配器?

首先,您需要tun2socks(通常是“badvpn”包的一部分)。tun2socks 設置了一個虛擬介面,您可以通過該介面路由流量,並且該流量將通過目標 socks 代理髮送。

設置它有點棘手,因為您只想通過隧道路由某些流量。

這個腳本應該做你想做的事:

#!/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

這是我們將使用的 socks 伺服器。

 

id="$RANDOM"
tun="$(printf 'tun%04x' "$id")"

這些生成用於隧道的隨機 ID。由於系統上可能有其他隧道,我們不能只使用tun0or 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這些在任何傳入的 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

這會啟動 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退出後執行。

引用自:https://unix.stackexchange.com/questions/144562