SSHトンネルを介したUDPトラフィック

ssh tunnel udp

タイトルにかなり要約されています。SSHトンネルを使ってUDPトラフィックを送りたい。具体的には、トンネルを通ってUDPパケットを送信して、反対側のサーバから私に送り返すことができるようにしたいのです。TCP 接続での方法は知っています。これはUDPで可能なのでしょうか?

  76  None  2009-10-09


ベストアンサー

この小さなガイドでは、ほとんどの UNIX ライクなオペレーティングシステムに標準装備されているツール (ssh,nc,mkfifo) を使って SSH 経由で UDP トラフィックを送信する方法を説明しています

SSH 接続を介して UDP トンネリングを実行します

Step by Step SSH接続でTCPフォワードポートを開きます

ローカルマシン(ローカル)では、TCPポートフォワードでSSHするように-Lオプションを追加して、遠くのマシン(サーバ)にSSHで接続します

local# ssh -L 6667:localhost:6667 server.foo.com

これにより、ローカルマシンのポート番号 6667 の TCP 接続が、セキュアチャネルを介して server.foo.com のポート番号 6667 に転送されるようになります。サーバ上でTCPからUDPへの転送を設定します

サーバ上ではTCPポート6667にリスナーを開いて、指定したIPのUDPポート53にデータを転送します。私のようにDNS転送をしたい場合は、/etc/resolv.confにある最初のネームサーバのIPを取ることができます。しかし、その前にfifoを作成する必要があります。fifoは2つのチャンネル間で双方向の通信を行うために必要です。単純なシェルパイプは、左プロセスの標準出力と右プロセスの標準入力を通信するだけです

server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo

これにより、サーバのポート6667のTCPトラフィックが192.168.1.1のポート53のUDPトラフィックに転送され、応答が返ってくるようになります。マシン上でUDPからTCPへの転送を設定します

さて、ローカルマシンで上で行ったこととは逆のことをする必要があります。UDP ポート 53 をバインドするには特権アクセスが必要です

local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo

これでローカルマシンのポート53のUDPトラフィックがローカルマシンのポート667のTCPトラフィックに転送されるようになります。ローカルDNSサーバを楽しんでください。)

もうお察しの通り、ローカルマシンでDNSクエリが実行されると、例えばローカルのUDPポート53で、ローカルのTCPポート6667に転送され、サーバのTCPポート6667に転送され、サーバのDNSサーバである192.168.1.1.1のUDPポート53に転送されます。ローカルマシンでDNSサービスを利用するには、/etc/resolv.confの最初のネームサーバとして以下の行を記述します

nameserver 127.0.0.1

42  John T  2009-10-09


このexample (John の回答は別の場所で同じことを指していると思います) は、TCP/SSH 接続を使って別のマシンの UDP/DNS サービスにアクセスする方法を説明しています

ローカルのUDP/53のトラフィックをTCPに転送し、SSHのポートフォワードの仕組みを利用してTCPのトラフィックを相手マシンに転送し、相手側のUDP/53にTCPを転送します。 通常はopenvpnで行います。 しかし、ここではもっとシンプルなツールで、opensshとnetcatだけでやってみます

そのページの最後に、’socat‘を参照した別のコメントがありますが、同じUDP/DNSアクセスは、、、で行われます

サーバ側。socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53 クライアント側。socat udp4-listen:53,reuseaddr,fork tcp:localhost:5353

詳細は socat の例 を参照してください

31  nik  2009-10-09


SSH (少なくとも OpenSSH) は単純な VPN をサポートしています。ssh クライアントの -w または Tunnel オプションを使うと、両端に tun デバイスを作成することができ、これを使ってあらゆる種類の IP トラフィックを転送することができます。(ssh_config(5) のマニュアルページにある Tunnel も参照してください。) このためには両端に OpenSSH (とおそらく root 権限) が必要になることに注意してください

21  user1686  2009-10-09


あるいは、単純に ssf (このユースケースを処理するために設計された) を使って、シンプルなコマンドを使うこともできます


Client side:

#>./ssfc -U 53:192.168.1.1:53 server.foo.com

このコマンドは、localhost と server.foo.com の間の安全なトンネルを経由して、ローカルポート 53 (dns) を 192.168.1.1.1 ポート 53 にリダイレクトします


(ssh サーバの代わりに、あるいはその隣に) ssf サーバが必要になります

#>./ssfs

ちなみにSSFのクライアント側、サーバ側ともにWindows / Linux / Macで動作します。ユーザーランドのアプリケーションなので、tun/tapやVPNは必要ありません

53番ポートをリダイレクトするには、使用しているツールに関わらず、管理者権限が必要です

詳細、詳細、ユースケース、ダウンロードはこちらから。https://securesocketfunneling.github.io/ssf/

20  ssf-developers  2015-06-11


SNMPクライアントが新しいソースUDPポートを選択し続けているため、ncをSNMPで動作させることができませんでした

その代わり、このブログ記事では、SNMPを例にsocatでのやり方を説明した記事を書いています。基本的には、2つの端末を使って、概要を説明するところから始めます

overview

Terminal one:

client$ ssh -L 10000:localhost:10000 server
server$ socat -T10 TCP4-LISTEN:10000,fork UDP4:switch:161

これにより、TCPポート10000のSSH転送が作成され、サーバ上でsocatが実行されます。socat コマンドラインでスイッチの IP アドレスが “switch” と記載されていることに注目してください

Terminal two:

client$ sudo socat UDP4-LISTEN:161,fork TCP4:localhost:10000

クライアントにsocatをセットアップします。これでいいわ

12  Peter V. Mørch  2015-09-16


UDPポートにアクセスできる場合は、VPNを利用した方が良いでしょう

TCP SSH ポートにしかアクセスできないのであれば、SSH トンネルは少なくとも ping とパケットバックトラッキングのためには VPN と同等の機能を持っています

4  Michael  2011-11-16


をsshサーバ上に設置しました

sudo ip tuntap add dev tun7 mode tun user SSHUSER
sudo ip addr add 192.168.7.1/30 dev tun7
sudo iptables -t nat -A PREROUTING -p udp -i eth0 --dport PUBLIC_PORT -j DNAT --to-destination 192.168.7.2:LOCAL_PORT
sudo iptables -t filter -A FORWARD -i eth0 -p udp -d 192.168.7.2 --dport LOCAL_PORT -j ACCEPT
sudo iptables -t filter -A FORWARD -i tun7 -o eth0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o tun7 -j MASQUERADE
# set "PermitTunnel point-to-point" for user SSHUSER in /etc/ssh/sshd_config
sudo sshd -t && sudo systemctl restart sshd

udp サーバを実行している ssh クライアント上で

sudo ip tuntap add dev tun8 mode tun user LOCALUSER
sudo ip addr add 192.168.7.2/30 dev tun8
ssh -v -w 8:7 SSHUSER@REMOTEHOST

コメントに触発された SSH トンネルを介したUDP トラフィック に触発された

0  canochordo  2020-05-20


タイトルとURLをコピーしました