タイトルにかなり要約されています。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つの端末を使って、概要を説明するところから始めます
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