it-swarm.asia

SSH tüneli üzerinden UDP trafiği

Başlık hemen hemen özetliyor. UDP trafiğini bir SSH tüneli üzerinden göndermek istiyorum. Özellikle, tünelden UDP paketleri gönderebilmem ve sunucunun diğer tarafta bana geri gönderebilmesini sağlamam gerekiyor. TCP bağlantılar için nasıl yapıldığını biliyorum. UDP ile mümkün mü?

63
heavyd

Bu küçük kılavuz , çoğu UNIX benzeri işletim sisteminde standart olarak gelen araçları kullanarak SSH üzerinden UDP trafiğini nasıl göndereceğinizi açıklar.

SSH bağlantısı üzerinden UDP tünellemesi gerçekleştirme

Adım adım SSH bağlantınızla bir TCP ileri bağlantı noktası açın

Yerel makinenizde (yerel), uzaktaki makineye (sunucuya) SSH ile bağlanın, ek -L seçeneğiyle, böylece SSH TCP bağlantı noktası ileri:

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

Bu, yerel makinenizin 6667 numaralı bağlantı noktasındaki TCP bağlantılarının, server.foo.com adresindeki 6667 numaralı bağlantı noktasına güvenli kanal üzerinden iletilmesini sağlar. TCP sunucusunda UDP iletme ayarını yapın

Sunucuda, TCP 6667 numaralı bağlantı noktasında, belirli bir IP'nin UDP bağlantı noktası 53'e veri iletecek bir dinleyiciyi açıyoruz. Benim gibi DNS yönlendirmesi yapmak istiyorsanız, /etc/resolv.conf içinde bulacağınız ilk ad sunucusunun IP'sini alabilirsiniz. Ama önce, bir beşlik yaratmamız gerekiyor. İkili, iki kanal arasında iki yönlü iletişim kurmak için gereklidir. Basit bir Shell boru yalnızca sol işlem 'standart çıktıyı sağ işlem' standart girdisine iletir.

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

Bu, sunucunun 6667 numaralı bağlantı noktasındaki TCP trafiğinin 192.168.1.1 numaralı bağlantı noktasındaki 53 numaralı UDP trafiğine yönlendirilmesini ve yanıtların geri gelmesini sağlar. UDP'yi makinenizde TCP için ileri doğru ayarlayın

Şimdi, yerel makinede yapılanların tam tersini yapmamız gerekiyor. UDP bağlantı noktası 53'ü bağlamak için ayrıcalıklı erişime ihtiyacınız var.

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

Bu, yerel makinenin 53 numaralı bağlantı noktasında UDP trafiğinin yerel makinenin 6667 numaralı bağlantı noktasında TCP trafiğine iletilmesine olanak sağlar. Yerel DNS sunucunuzun tadını çıkarın :)

Şimdi muhtemelen tahmin ettiğiniz gibi, yerel makinede bir DNS sorgusu gerçekleştirileceği zaman, ör. Yerel UDP bağlantı noktası 53'te yerel TCP bağlantı noktası 6667'ye, ardından sunucunun TCP bağlantı noktası 6667'ye, ardından sunucunun DNS sunucusu, 192.168.1.1'in 53 numaralı UDP bağlantı noktasına yönlendirilir. Yerel makinenizde DNS hizmetlerinden yararlanmak için, aşağıdaki satırı /etc/resolv.conf dosyasına ilk ad sunucusu olarak yerleştirin:

nameserver 127.0.0.1
35
John T

Bu örnek (John'un cevabının aynı şeyi farklı bir yere işaret ettiğini düşünüyorum), başka bir makinenin UDP/DNS servislerine TCP/SSH bağlantısı üzerinden nasıl erişileceğini açıklar.

Yerel UDP/53 trafiğini TCP'ye, ardından TCP trafiğini SSH'nin bağlantı yönlendirme mekanizmasıyla diğer makineye, daha sonra TCP (UDP/53) diğer uca yönlendireceğiz.
Genellikle, openvpn ile yapabilirsiniz.
Ama burada, basit araçlarla yapacağız, sadece openssh ve netcat.

Bu sayfanın sonunda, ' socatNAME _ ' referansına sahip başka bir yorum.
Aynı UDP/DNS erişimi,

Sunucu tarafı: socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
Müşteri tarafı: socat udp4-listen:53,reuseaddr,fork tcp:localhost:5353

socat örnekleri daha fazla bilgi için bakınız.

24
nik

SSH (en azından OpenSSH) basit VPN'leri destekliyor. Tunnel istemcisindeki -w veya ssh seçeneğini kullanarak, her iki uçta da her türlü IP trafiğini iletmek için kullanılabilecek bir tun aygıtı oluşturabilirsiniz. (Ayrıca bkz. ssh_config(5) . Kılavuzundaki Tunnel.) Bunun her iki uçta da OpenSSH (ve muhtemelen root ayrıcalıkları) gerektirdiğine dikkat edin.

20
grawity

Veya basit bir komutla basitçe ssf (bu kullanım durumunu ele almak için tasarlanmış) kullanabilirsiniz:


Müşteri tarafı:

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

Bu komut, yerel bağlantı noktası 53'ü (dns) 192.168.1.1 bağlantı noktası 53'e, localhost ve server.foo.com arasındaki güvenli bir tünel üzerinden yönlendirir.


Bir ssf sunucusuna ihtiyacınız olacaktır (yerine - veya - yanında ssh sunucunuz):

#>./ssfs

Bu arada, ssf'nin hem istemci hem de sunucu tarafı Windows/Linux/Mac'te çalışıyor. Bu bir kullanıcı uygulamasıdır, bu nedenle tun/tap veya VPN gerekmez.

53 numaralı bağlantı noktasını yönlendirmek için, kullandığınız araç ne olursa olsun, yönetici ayrıcalıklarına ihtiyacınız olacaktır.

Daha fazla bilgi için, ayrıntıları kullanın, dava kullanın veya indirin: https://securesocketfunneling.github.io/ssf/

14
ssf-developers

SNMP istemcileri yeni bir kaynak UDP bağlantı noktası seçmeye devam ettiğinden SNMP için çalışacak nc işlevini alamadım ve birkaçı aktif olabilir.

Bunun yerine, örnek olarak SNMP kullanarak bu blog yazısı içinde socat ile nasıl yapılacağını açıklayan bir yazı yazdım. Temel olarak, iki terminal kullanarak, genel bakıştan başlayarak:

overview

Birinci terminal:

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

Bu, TCP bağlantı noktasının 10000 SSH iletimini oluşturur ve sunucuda socat çalıştırır. Anahtarın IP adresinin socat komut satırında “anahtar” olarak belirtildiğine dikkat edin.

İkinci terminal:

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

Bu müşteri üzerinde socat kurar. Bunu yapmalı.

9
Peter V. Mørch

Bir UDP bağlantı noktasına erişiminiz varsa, VPN daha iyi bir çözümdür.

Yalnızca TCP SSH portuna erişiminiz varsa, bir SSH tüneli en azından ping ve paket geri izleme için VPN kadar iyidir.

4
Michael