web-dev-qa-db-ja.com

SOCKSプロキシを介してeth1およびeth2からのすべてのパケットをリダイレクトする

Eth1とeth2の間で送受信されるすべてのトラフィック(UDPとTCP)をSOCKSプロキシ(Tor)を介してリダイレクトし、eth0を通過させる方法はありますか?

eth0:インターネット入力-メインルータ、ケーブルモデムへとつながります。

eth1:モデムとしてのUSBイーサネットポートのセットアップ(私が探している言葉だと思いますよね?)

eth2:WiFiホットスポットとしてのUSB WiFiアンテナのセットアップ

Torを介して直接ルーティングするためにiptablesのようなものを使用できますか、それともPrivoxyのようなアダプターが必要ですか?

8
Timberwolf

まず、必要なのは 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を生成します。システム上に他のトンネルがある可能性があるため、tun0または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

これらは、すべてのTCPパケットが$idまたはeth1に着信するパケットにファイアウォールマークeth2を設定します。TCPにのみ一致させる必要があります。ソックスは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が終了すると1回だけ実行されます。

8
Patrick