TP-Link TL-WR1043ND ルーターを実行しています OpenWrt および Gargoyle を使用しています。ローカルネットワーク(ルーターがサービスを提供)からリモートサーバーにすべてのトラフィックを透過的に転送したいと思います。基本的に、接続されたクライアントマシンをプロキシ用に構成する必要なしに、socksプロキシが機能するように。
sshuttle がこの種の要件を満たす方法であることを読みました。多くのいじりをした後、私は最終的にすべての前提条件を満たして、次のようなエラーメッセージなしでシャトルを開始できます。
./sshuttle --dns -vvr [email protected] 0/0
XXXXXXがリモートサーバーでの私のユーザー名である場合YY.YY.YY.YYシャトルは正常に初期化され、エラーメッセージは表示されず、必要なすべてのルールがiptablesに追加されますが、ローカルプロキシが確立された後、接続できませんどこでも私のローカルネットワークから。これはシャトルの出力です:
Starting sshuttle proxy.
Binding: 12300
Listening on ('127.0.0.1', 12300).
DNS listening on ('127.0.0.1', 12300).
firewall manager ready.
c : connecting to server...
c : executing: ['ssh', '[email protected]', '--', 'P=python2; $P -V 2>/dev/null || P=python; exec "$P" -c \'import sys; skip_imports=1; verbosity=2; exec compile(sys.stdin.read(764), "assembler.py", "exec")\'']
c : > channel=0 cmd=PING len=7 (fullness=0)
WARNING: Ignoring unknown argument '--'
[email protected]'s password:
server: assembling 'cmdline_options.py' (29 bytes)
server: assembling 'helpers.py' (914 bytes)
server: assembling 'ssubprocess.py' (13668 bytes)
server: assembling 'ssnet.py' (5446 bytes)
server: assembling 'hostwatch.py' (2270 bytes)
server: assembling 'server.py' (2370 bytes)
s: latency control setting = True
s: available routes:
s: 69.64.32.0/22
s: > channel=0 cmd=PING len=7 (fullness=0)
c : connected.
Connected.
c : Waiting: 3 r=[3, 5, 9] w=[9] x=[] (fullness=7/0)
c : Ready: 3 r=[] w=[9] x=[]
c : mux wrote: 15/15
c : Waiting: 3 r=[3, 5, 9] w=[] x=[] (fullness=7/0)
s: > channel=0 cmd=ROUTES len=14 (fullness=7)
s: Waiting: 1 r=[4] w=[5] x=[] (fullness=21/0)
s: Ready: 1 r=[] w=[5] x=[]
s: mux wrote: 15/15
s: mux wrote: 22/22
s: Waiting: 1 r=[4] w=[] x=[] (fullness=21/0)
c : Ready: 3 r=[9] w=[] x=[]
c : < channel=0 cmd=PING len=7
c : > channel=0 cmd=PONG len=7 (fullness=7)
c : < channel=0 cmd=ROUTES len=14
firewall manager: starting transproxy.
s: Ready: 1 r=[4] w=[] x=[]
s: < channel=0 cmd=PING len=7
s: > channel=0 cmd=PONG len=7 (fullness=21)
s: mux wrote: 15/15
s: Waiting: 1 r=[4] w=[] x=[] (fullness=28/0)
>> iptables -t nat -N sshuttle-12300
>> iptables -t nat -F sshuttle-12300
>> iptables -t nat -I OUTPUT 1 -j sshuttle-12300
>> iptables -t nat -I PREROUTING 1 -j sshuttle-12300
>> iptables -t nat -A sshuttle-12300 -j RETURN --dest 127.0.0.0/8 -p tcp
>> iptables -t nat -A sshuttle-12300 -j REDIRECT --dest 0.0.0.0/0 -p tcp --to-ports 12300 -m ttl ! --ttl 42
>> iptables -t nat -A sshuttle-12300 -j REDIRECT --dest 127.0.0.1/32 -p udp --dport 53 --to-ports 12300 -m ttl ! --ttl 42
c : mux wrote: 15/15
c : < channel=0 cmd=PONG len=7
c : received PING response
c : Waiting: 3 r=[3, 5, 9] w=[] x=[] (fullness=0/0)
s: Ready: 1 r=[4] w=[] x=[]
s: < channel=0 cmd=PONG len=7
s: received PING response
s: Waiting: 1 r=[4] w=[] x=[] (fullness=0/0)
この問題のデバッグを開始する方法すらわかりません。シャトルを停止すると、iptablesルールが削除され、ネットワーク接続が再び機能します。
firewall manager: undoing changes.
>> iptables -t nat -D OUTPUT -j sshuttle-12300
>> iptables -t nat -D PREROUTING -j sshuttle-12300
>> iptables -t nat -F sshuttle-12300
>> iptables -t nat -X sshuttle-12300
c :
c : Keyboard interrupt: exiting.
誰かがopenwrtで動作するシャトルインスタンスをセットアップすることに成功しましたか?または、ここで必要なもの(openwrtルーターの透過プロキシ)を実現する他の方法はありますか?
関連する未回答の質問: DD-WRT/OpenWRTルーターでのシャトル
幸いなことに、sshuttleの作者から sshuttle google group で回答を得ました。彼が書きました:
Localhost(ルーター自体)以外からの接続をリッスンするようにシャトルに指示するために、「-l 0.0.0.0」(小文字のL)を追加する必要がある場合があります。セキュリティ上の理由から、シャトルはデフォルトで他の人のトラフィックをルーティングしません。
そしてそれは完璧に機能します!使用する:
./sshuttle -l 0.0.0.0 --dns -vvr [email protected] 0/0
私をつまずかせたいくつかのこと:
在庫のOpenWRT12.09 AAから、次のパッケージをインストールする必要があります。
python
(依存関係がある場合、3〜4 MBのフラッシュを消費します)iptables-mod-nat-extra
iptables-mod-ipopt
次に、SSHキーを使用してリモートサーバーにSSHで接続するには、Dropbear形式のキーを作成する必要があります。
dropbearkey -t rsa -f /root/.ssh/id_rsa
最後に、sshuttle
コマンドラインでキーの場所を指定します。
./sshuttle -e "ssh -i /root/.ssh/id_rsa" -l 0.0.0.0 -r [email protected] 0/0 -vv --dns
OpenWrt Chaos Calmer 15.05を実行するGL-AR300Mルーターでは、手順が@trapezoidの説明と少し異なるようです。たぶんそれは完全に在庫のあるOpenWRTではない(私は購入後に再インストールしなかった)か、それはただの時間の経過です。
彼らが名前を付けたパッケージ、つまりpython iptables-mod-nat-extra iptables-mod-ipopt
をインストールしました。
Sshキーベースのログインが機能するために、特別なsshキーを生成する必要はありませんでした。通常のキーで十分でしたが、autorized_keys
を/etc/dropbear/
に移動する必要がありました(つまり、ssh-copy-id
はそれを正しいディレクトリに配置しませんでした) 。