状況には3台のマシンが含まれます。
[〜#〜] 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
がどのように機能するかを完全に理解していないことが原因である可能性があります。
私はあなたが提供できるどんな助けにも感謝します!
サーバー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
チェーンのルールの影響を受けます。