
これをUnixとLinuxで質問すべきか、ネットワークエンジニアリングで質問すべきかわかりません
これが物理的なシナリオです
[ホスト 1]----[キャリアグレード NAT]---->AWS<----[キャリアグレード NAT]----[ホスト 2]
ホスト1そしてホスト2AWS Box にリバース SSH (autossh) されるため、必要に応じてシェル接続が可能であり、必要に応じて他のポートを公開することもできます。
ホスト2バックアップダンプをプッシュするホスト1SCPを定期的に使用しています。実際にはホスト2×10データダンプをプッシュするボックス。最も近い AWS の場所はボックスの場所からかなり離れているため、レイテンシはかなり大きくなります。
AWS ボックスをランデブー ポイントとして使用して、ボックス間の SSH トンネルを仲介する可能性はありますか? IPv6 トンネル ブローカーについては知っていますが、この地域の ISP はまだそれを採用していません (20 年遅れです... 当然です!)。私は次の点に基づいてソリューションを検討しています:
- TCP / UDP ホールパンチング(実用的な実装)
- AWS 上の UPnP / NAT-PMP サービス
- Chromeリモートデスクトップなどのツールを使用して、VNCではなくSSHポートを公開するようにハッキングする
- その他のルーター サービス。
- その他の実用的なアプローチ。
ボックスでは主に CentOS 6/7 が実行されています。
答え1
ただし、これはまさに必要なことではありません。iptables を使用して、host1 または host2 の反転ローカル ポートを外部ポートとして公開することができます。つまり、host2 を ssh 反転トンネルとして接続したとします。
user2@host2 $ ssh -R 9999:localhost:22 [email protected]
これで、着信ポート aws.com:9999 を aws [localport:9999] に転送できます。AWS サーバーの場合:
[email protected] # iptables -t nat -I PREROUTING -p tcp --dport 9999 -j DNAT --to 127.0.0.1:9999
そして、次のようにして host2 から host1 に接続できます。
user1@host1 $ ssh [email protected] -p 9999
ビンゴ。このように接続しました:
[ホスト 1] --> [aws:ポート 9999] --> [aws: 127.0.0.1:9999 の逆トンネル] --> [ホスト 2]
この接続が使用されなくなった場合は、iptable レコードを削除する必要があります。
[email protected] # iptables -t nat -A PREROUTING -p tcp --dport 9999 -j DNAT --to 127.0.0.1:9999
このソリューションの欠点は、host2 が外部ポート 9999 を通じてすべてのユーザーに公開されることです。ログインするにはパスワードを入力する必要がありますが、パスワードは公開されます。
UPD: ローカル転送を有効にする必要がある場合もあります:
awsuser@aws # ls echo 1 > /proc/sys/net/ipv4/conf/all/route_localnet
または、すべてのインターフェースで有効にする代わりに、収入インターフェースでのみ有効にします。
awsuser@aws # ls echo 1 > /proc/sys/net/ipv4/conf/eth0/accept_local