
SSH経由でローカルポートからリモートマシンにトラフィックを転送しようとしていますプロキシ(トンネルではありません)。iptables ルールだけでは実行できないことを知りました (正しくない場合は訂正してください)。そこで、TCP 接続を SSH SOCKS プロキシにリダイレクトするように REDSOCKS を設定しました。OUTPUT
チェーンの iptables ルールを使用して、ローカル トラフィックをリモート マシンに転送できましたが、PREROUTING の同じ概念は機能しませんでした。目標は、ローカル マシンが外部のインターネットをリモート マシンのネットワーク (VPN など) と同じように表示できるようにすることです。
---------- --------------
| inside | <-- 10.0.0.0/24 --> |-> iptables |
---------- | | |
| ˇ |
| redsocks |
| | |
| ˇ | ----------
| ssh -> | <-- internet --> | remote |
-------------- ----------
注: リモート マシンでは何も (構成の変更、ルートの追加) したくありません。
SSH 接続が確立されましたssh -D 1337 user@remote
。Redsocks
はすでに設定および起動されており、ポート でリッスンしています12345
。
ミドルマシンの場合:
OUTSIDE_INTERFACE=wlan0
INSIDE_INTERFACE=eth0
SSH_SOCKS_PORT=1337
REDSOCKS_PORT=12345
# set the ip address
ifconfig $INSIDE_INTERFACE 10.0.0.1 netmask 255.255.255.0
# enable ip forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# reset iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -F
iptables -X
# redirect local traffic, except traffic from redsocks to ssh
iptables -t nat -A OUTPUT -p tcp --dport $SSH_SOCKS_PORT -j RETURN
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
# redirect traffic from inside
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
この後、ローカルマシンからのトラフィックはリダイレクトされ、リモートネットワークにいるときと同じようにインターネットを見ることができます。
しかし、内部マシンはできないインターネットへのアクセス。
(IPアドレスは内部マシンはすでに設定されており、ping が成功してテストされています。
私は試した:
iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p tcp -j REDIRECT --to-ports 12345
- 追加する
iptables -t nat -A POSTROUTING -o $OUTSIDE_INTERFACE -j MASQUERADE
もし私がのみiptables -t nat -A POSTROUTING -o $OUTSIDE_INTERFACE -j MASQUERADE
ルールを設定する一人で内部のマシンはインターネットにアクセスできます (ただし、プロキシ経由ではありません)。
接続しようとすると、次の統計が表示されます。
# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 10 packets, 641 bytes)
pkts bytes target prot opt in out source destination
42 2184 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 redir ports 12345
Chain INPUT (policy ACCEPT 43 packets, 2244 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 19 packets, 1164 bytes)
pkts bytes target prot opt in out source destination
18 1080 RETURN tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1337
18 1080 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 redir ports 12345
Chain POSTROUTING (policy ACCEPT 46 packets, 2825 bytes)
pkts bytes target prot opt in out source destination
私の理解では、内部マシンからのパケットもリダイレクトされるが、どこかで失われることを意味します...
また質問があります
- なぜ ssh トラフィックがルールによってリダイレクトされないのですか
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
?$SSH_SOCKS_PORT
ポートのみをフィルタリングしました...
答え1
問題はiptablesルールにはありませんでした。あるいは、主な原因ではありませんでした。iptables
REDIRECT以下をせよ:
宛先IPをプライマリIPに変更することで、パケットをマシン自体にリダイレクトします。着信インターフェースのアドレス(ローカルで生成されたパケットは 127.0.0.1 アドレスにマッピングされます)。
そして、レッドソックスは、デフォルトでは、パケットが来ただけを聞きます127.0.0.1そのため、インターフェース アドレスを宛先とするパケットは redsocks に到達しません。
redsocksの設定を変更した後local_ip = 0.0.0.0;
出来た。
(注: これは TCP のみで、UDP (DNS など) の場合はさらに設定が必要です。)
答え2
状況に応じて、redsocksを10.0.0.1に監視し、次にREDIRECTまたはDNATを監視するだけで済みます。
iptables -t nat -A PREROUTING -p tcp -m tcp --syn -j DNAT --to 10.0.0.1:12345
私もあなたと同じ問題に遭遇しました。OUTPUT に混乱し、127.0.0.1 でリッスンし続けました。