ポート転送なしでホームネットワークにSSHで接続する

ポート転送なしでホームネットワークにSSHで接続する

いくつかのRaspberry Piをいくつかのホームネットワークにインストールし、ポート転送なしでリモートクライアントからSSH経由でアクセスできるようにしたいと思います。

クライアントは固定されていないため、すべてのクライアントがすべてのRaspberry Piに接続できる必要があります。

私の考えは、各RPIが既知のIPを使用して中央サーバーへのリバースSSH接続を開くようにして、クライアントがC&Cサーバーに接続できるようにすることです。次に、何らかの方法で接続をRPIの1つに転送します(どのRPIを選択できるか)。クライアントがC&Cサーバーに接続するポート)

これまで、私は次のようにRPIポート22をC&Cサーバーに提供する必要があることを知っています。

RPIで実行: ssh -R 127.0.0.1:2222:127.0.0.1:22 user@[c&c ip]

C&Cは理論的にはローカル2222ポートに接続してRaspiの1つに接続できますが、これまでC&Cを介して外部からRPIの1つに接続する機能はありません。

編集:解決策が見つかりました: C&Cサーバーで/etc/ssh/sshd_configを編集しgatewayportsますyes

これで、C&C サーバーのポート 2222 に接続して RPI に到達できるようになります。

スケッチ

ベストアンサー1

ポートフォワーディングがありません。

しかし、あなたがやっていることは(SSHトンネルを介した)ポート転送です!

したがって、これを達成するには、各RPiにサーバーに独自のポートを提供するのではなく(迅速に混乱する可能性があります)、各クライアントが固定IPアドレスを持つ内部ネットワークを持つことが直感的に見えます。パブリックIPネットワークを介してトンネリングされます。 VPN!

これにより、クライアントとRaspberry Piの間に実質的な違いはありません。どちらも固定パブリックアドレスを持たないVPNのシステムです。

最近は設定がとても簡単です。関連するすべてのシステムにwireguardツールをインストールし、各システムに公開/秘密鍵のペアを作成するだけです(wg genkey | tee private_key | wg public_key)。
各クライアントとRPに、次の内容を含む構成ファイルを提供します。

[Interface]
PrivateKey = {Private key as generated on this machine}

# Pick an different individual address for each machine from the
# networks described below as allowed:
Address = 10.0.123.101, fd42:42:42:0:0101::
#                  ^^^               ^^^^^^
# Parts of the addresses to modify; I just randomly chose to 
# give 10.0.123.101 – 10.0.123.199 to your RPis, and 
# give 10.0.123.201 – 10.0.123.254 to your clients

DNS = {IP address of the DNS resolver to use}


[Peer]
PublicKey = {The public key from the server}
Endpoint = {The public IP address of the server}:{Port on the server}

# Allow addresses from the private networks:
#  IPv4: 10.0.123.0
#through 10.0.123.255
#
#  IPv6: fd00:1111:2222:1:0000:0000:0000:0000 
#through fd00:1111:2222:1:ffff:ffff:ffff:ffff
AllowedIPs = 10.0.123.0/24,fd00:1111:2222:1::1/64

そしてサーバーではほとんど同じですが、すべてのクライアントコンピュータをPeersとして一覧表示します。

[Interface]
PrivateKey = {Private key as generated on this machine (the server)}
Address = 10.0.123.0, fd42:42:42:0::
DNS = {IP address of the DNS resolver to use}

[Peer]
PublicKey = {The public key from the 1. RPi}
AllowedIPs = 10.0.123.101/32, fd42:42:42:0:0101::/128


[Peer]
PublicKey = {The public key from the 2. RPi}
AllowedIPs = 10.0.123.102/32, fd42:42:42:0:0102::/128
# all the other RPis…

# … and all of the "clients":
[Peer]
PublicKey = {The public key from the 1. client}
AllowedIPs = 10.0.123.201/32, fd42:42:42:0:0201::/128
[Peer]
PublicKey = {The public key from the 2. client}
AllowedIPs = 10.0.123.202/32, fd42:42:42:0:0202::/128
# …

はい(/etc/wireguard/たとえば、これらの設定ファイルをとして保存し、wgvpn0.confそれを使用して有効にします。IPv4systemctl enable --now wg-quick@wgvpn0を使用するかv6を使用するかによって異なります)ssh 110.0.123.101

おすすめ記事