web-dev-qa-db-ja.com

sshトンネルを介したIP転送

状況には3台のマシンが含まれます。

  • [〜#〜] a [〜#〜]何らかの手段でインターネットに接続されているラップトップ
  • [〜#〜] b [〜#〜]標準のISP(dyndnsが提供する静的IP:myserver.dyndns.com)を介してインターネットに接続されているサーバー
  • [〜#〜] c [〜#〜] 4Gドングルを介してインターネットに接続されている別のサーバー

[〜#〜] a [〜#〜] <--- ISP1 --- ISP 2 ---> [〜#〜] b [〜#〜] <--- ISP 2 --- 4G ---> [〜#〜] c [〜#〜]

4Gドングルは新しい着信接続を拒否するため、autosshチャネルを配置して、Bを介してAからCに接続します。

autossh -M 0 -N [email protected] -R 10022:127.0.0.1:22 -R 10000:127.0.0.1:10000

それはうまくいきます。

ここで、次のように入力して4GドングルのWebインターフェイスにアクセスしたいと思います。

myserver.dyndns.com:80

だから私はNATを試しました:

  • オン[〜#〜] b [〜#〜]

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:10000
    

    そして

    iptables -t nat -A POSTROUTING -d 127.0.0.1 --dport 10000 -j MASQUERADE`
    
  • オン[〜#〜] c [〜#〜]

    iptables -t nat -A PREROUTING -p tcp --dport 10000 -j DNAT --to-destination 192.168.8.1:80
    

    そして

    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    

注意: eth1は4Gドングルのインターフェースです。[〜#〜] c [〜#〜]そのインターフェースのIPは192.168.8.100で、ドングルのIPは192.168.8.1です。

残念ながら、それは機能しません。 IP転送も有効にしました。

echo 1 > /proc/sys/net/ipv4/ip_forward

入力するとき

iptables -t nat -L -v -n

[〜#〜] b [〜#〜]および[〜#〜] c [〜#〜]では、[〜 #〜] b [〜#〜]試行するたびに、パケット数が増加します。

これは、netfilterがどのように機能するかを完全に理解していないことが原因である可能性があります。

私はあなたが提供できるどんな助けにも感謝します!

3
Thomas

サーバーBとCにiptables -t filter -nvL出力を提供していただけませんか。

autosshチャネルはサーバーCで実行されていると思います。正しいですか?もしそうなら、私は別のアプローチを提案します。 Bでは、カーネルが非特権ユーザーにポート80のオープンを許可しないため、REDIRECTルールが必要です。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 10000
iptables -t filter -A INPUT -p tcp --dport 10000 -j ACCEPT

(EDIT):サーバーBでは、GatewayPorts/etc/ssh/sshd_configで有効にする必要があります。

# /etc/ssh/sshd_config
GatewayPorts clientspecified

サーバーCで、autossh引数を変更して、接続をドングルに直接転送します。

autossh -M 0 -N [email protected] -R 10022:127.0.0.1:22 \
    -R :10000:192.168.8.1:80

セットアップで確認できる唯一のエラーは、サーバーCのPREROUTINGチェーンルールにあります。このシナリオでは、ネットワークインターフェイスを介して入力されるパケットにのみ影響するため、評価されません。 sshによって作成された接続はローカルで生成されるため、OUTPUTチェーンのルールの影響を受けます。