
私の状況は次のとおりです。
現在、SSHトンネルを介してUDPパケットを送信するために2つのホスト間でプログラムを取得しようとしています。 2 つのホスト間に中間ホストもあります。 Server01 は 2 つのサブネットを分離します。
サブネット: //// 10.11.XX ///////// 192.168.XX
ホスト: クライアント <-------> Server01 <------> Server02
SSH接続が正常に確立され、RSAキーを使用したため、パスワードは必要ありません。
その後、このチュートリアルに従いました。
要約すると、次のように入力してsocatを使用してserver01でTCP-UDPリレーを設定するように求められます。
server01$ socat tcp4-listen:8000,reuseaddr,fork udp:server02:53
そしてクライアントでsocatを使用するUDP-TCPリレー:
client$ socat -T15 udp4-recvfrom:53000,reuseaddr,fork tcp:localhost:8000
これで問題が発生します。私のプログラムでlocalhost UDPポート53000にソケットを作成してデータを送信しようとすると、
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
私はserver02をクライアントと同じサブネットに配置すると、私のプログラムはUDPパケットを完全に交換するので、私のプログラムは大丈夫だと思います。
プログラムがUDPポート53000ソケットにアクセスできるようにする必要がある設定はありますか?それともsocatがUDPポートを使用しているため、UDPポートにソケットを作成できませんか?私はしばらくこの問題に閉じ込められていました...どんな助けでもいいでしょう。
よろしくお願いします。
答え1
ポートにアクセスできるようにプログラムをsudoとして実行する必要があることを知っています。これが将来的に誰かに役立つことを願っています。
編集:私のCプログラムにはソケットをUDPポート53000に接続し、そのポートを介してパケットを送信するにはsudo権限が必要です。
答え2
socat
TCPをUDPに変換する方法は次のとおりです。
しかし、説明ではsshについて話しませんでした。
に-L
渡すにはsshを実行する必要があります。client TCP 8000
server01 tcp 8000
ssh -L 8000:localhost:8000 server01
クライアントでこのようなものを実行する必要があります