SSH tüneli / oturumu için UDP delik delme nasıl kullanılır


21

Raspberry Pi'yi hafta sonu kulübemde kullanmak istiyorum. Raspberry Pi, sıcaklıkları kaydetmek ve sabit bir IP'ye sahip, verileri kaydedip basit bir web sitesinde görüntüleyen uzak bir sunucuya göndermek için var.

Ancak Ahududu Pi'de bir şeyleri değiştirmek istediğim durum ortaya çıkabilir. Örneğin, sistem güncellemeleri veya verileri sunucuya veya her neyse gönderen programdaki bir değişiklik.

Önerilen kurulumla, Raspberry Pi'ye LAN'ının dışından bağlanamayacağım.

NOT: Ağı değiştirmek istemiyorum ve mevcut yönlendiricinin port yönlendirme, dynDNS veya VPN için yeteneği yok.

Geçenlerde UDP delik delme okudum. Temel fikir, istemcinin bilinen bir sunucu adresine bir UDP Paketi göndermesidir (yani genel bir IP veya dynDNS etkinken). A istemcisine bağlanmak isteyecek olan B istemcisi, sunucudan A istemcisinin genel IP ve Port numarasını ister.

Daha sonra A istemcisine doğrudan genel IP ve dinamik olan bağlantı noktasından bağlanabilir. İstemci A ilk olarak kullanılan bağlantı noktasındaki sunucuya bağlandığından, NAT paketleri istemci A'ya iletir.

Umarım bu fikri doğru, az ya da çok özetledim…

Her şey kulağa hoş geliyor, ama sorun şu ki, yönlendirici TCP bağlantısının el sıkışmasını “anlayabildiğinden” ve bir TCP bağlantısıyla çalışacağı garanti edilmiyor ve doğru şekilde kurulmuyorsa, iletilmeyecek paketleri.

Öyleyse, istemci A olmadan dynDNS, düzeltme genel IP'si veya bağlantı noktası yönlendirme yeteneği olan bir yönlendiricinin arkasında oturan bir istemci olmadan istemci B'den bir SSH Oturumunu nasıl açabilirim? Genel, sabit IP veya etki alanı adıyla merkezi bir sunucunun kullanılması zor olabilir.


UDP delme yeteneğine sahip ancak TCP değil, internete bakan bir cihazınız var mı? Daha iyi bir NAT cihazı edinin.
cpt_fink

Udp ile ssh yapmadım ama burada bir bağlantı var zarb.org/~gc/html/udp-in-ssh-tunneling.html
barlop

Bilmiyorum ama bir ssh gurusu sordum, ssh'ın udp'yi iletebileceğini söylediler, ama sadece bir vpn gibi davranıyorsa ve bunun için bir anahtar varsa, dedi -wama tcp üzerinde udp dedi (belki de o tarafından udp'yi ssh ile iletme girişimlerini içerir), yüksek gecikme süresi ve artık istemediğiniz şeyleri yeniden iletme gibi sorunları içerir. Yine de denemek ilginç bir şey sanırım. Bu vpn'i
barlop

Neden bir gelen bağlantı noktası açmak istemediğinizi merak ediyorum? - Bu, süper harika güvenlik gerektiren bir senaryo gibi görünmüyor ... Alternatif olarak, A istemcisinin, B istemcisinin erişebildiği bir sunucuya ters bağlantı noktasıyla giden bir SSH bağlantısını sürdürmesini sağlayabilirsiniz. Bu şekilde orta-adam sunucu üzerinden bağlanabilirsiniz. Bununla birlikte, bu tür düzenlemeler başarısızlığa eğilimlidir ve yanlış gittiğinde çözmek için sınırlı fiziksel erişim göz önüne alındığında oldukça istenmeyen bir durumdur.
kabadisha

Yanıtlar:


8

pwnat


“.. NAT'ın arkasındaki bir akranla bağlantı kurmak önemsiz değil .

".. neredeyse tüm NAT uygulamaları , son zamanlarda eşleşen bir giden istekle eşleşmeyen gelen trafiği iletmeyi reddediyor . "


"..Araç pwnat, yalnızca GNU / Linux tabanlı , bağımsız bir NAT geçişi uygulamasıdır. NAT'ın arkasındaki sunucuyla iletişim kurduktan sonra , UDP paketlerini kullanarak TCP anlambilimine sahip bir kanal oluşturur . NAT'ın arkasındaki istemci ve sunucuyu destekler (NAT'lardan biri sahte [özel] ICMP iletilerinin iletilmesine izin veriyorsa ) Bu uygulama son kullanıcıları hedefler. "


  
kullanımı: ./pwnat <-s | -c> <args>

  -c istemci modu
    <args>: [yerel ip] <yerel bağlantı noktası> <proxy ana makinesi> [proxy bağlantı noktası (def: 2222)] <uzak ana bilgisayar> <uzak bağlantı noktası>

  -s sunucu modu
    <args>: [local ip] [proxy bağlantı noktası (def: 2222)] [[izin verilen ana makine]: [izin verilen bağlantı noktası] ...]

  -6 IPv6 kullanın  
  -v hata ayıklama çıktısını göster (en fazla 2)  
  -h yardımı göster ve çık  

Örnekler:  

    Herkesin proxy yapmasına izin veren sunucu tarafı:
      ./pwnat -s

    Google.com'a bağlanmak isteyen istemci:80:
      ./pwnat -c 8000 <pwnat.server.com> google.com 80
    Ardından, google'ı ziyaret etmek için http: // localhost: 8000 adresine gidin!  


pwnat;  ağ sinyal akış şeması


"Sağlamak için bir temel fikri sunucusu için müşterinin IP adresini öğrenmek içindir sunucu için periyodik sabit, bilinen IP adresine mesaj göndermek. En basit yaklaşım bir ICMP ECHO TALEBİ mesajları kullanır ayrılmamış IP adresi, örneğin 1.2.3.4 1.2.3.4 ayrılmadığından ICMP TALEBİ , varsayılan bir rota olmadan yönlendiriciler tarafından yönlendirilmeyecektir. "

"1.2.3.4'e gönderilen iletilerin bir sonucu olarak, NAT bu isteğe yanıt olarak yanıtların yönlendirilmesini etkinleştirecektir . Bağlanan istemci daha sonra böyle bir yanıtı taklit edecektir. Özellikle, istemci bir ICMP iletisini iletecektir TTL_EXPIRED. mesajı herhangi bir İnternet yönlendiricisi tarafından yasal olarak iletilebilir ve gönderen adresinin sunucunun hedef IP'siyle eşleşmesi beklenmez. "

" Sunucu (sahte) ICMP yanıtlarını dinler ve alındıktan sonra ICMP yanıtında belirtilen gönderen IP'sine bir bağlantı başlatır . İstemci genel olarak yönlendirilebilir bir IP adresi kullanıyorsa, bu tamamen sorunsuzdur ve hem TCP hem de UDP kullanılabilir bir çift yönlü bağlantı kurmak için eğer istemci dinleyen bir üzerinde önceden kararlaştırılmış port. "

"(Önceden kararlaştırılmış bir portun bulunmadığı durumlarda, bir port numarası çoğu durumda ICMP ECHO RESPONSE yükünün bir parçası olarak iletilebilir )."


Kaynak: http://samy.pl/pwnat.pdf
https://github.com/samyk/pwnat


pwnat, localhost ile localhost bağlantıları arasında bile işlevsel değildir. Bazı paketler gönderip alabilirim, ancak sağlam bağlantılar kurmak için çok kullanışlı değil.
Scott

@Scott Bu ilginç bir hack, ama gerçekten sadece ICMP gibi ağ protokollerinin yanlış ve kötüye kullanılmasına dayanan bir kavram kanıtı. Buna güvenmem. Eski ve bakımsız ve bunu kullanmanızı tavsiye etmem. Eğer soru özellikle UDP delinmesini şart koşmasaydı bile bundan bahsetmezdim. Güvenilir olmak istiyorsanız, bir VPN tüneli bağlayın.
sesler

Ben şikayetçi değilim, ama "bu çözüm bir üretim ortamında kullanım için değil" potansiyel olarak istikrarlı bir çözüm arayan buraya gelen herkes için yararlı bir bilgi olduğunu düşünüyorum.
Scott

@Scott Böyle ve böyle bir ortamda kullanım için değil. Birçok tescilli ürün tez teknikleri kullanmaktadır. Her neyse, burada insanların kendi kararlarını vermeleri için yeterli bilgi var. Ben tavsiye etmiyorum. Ama VPN tünelleri kullanıyorum. Öte yandan, bazı ağlar VPN trafiğini filtrelediğinden, her şeyi duruma göre almanız gerekir. NAT yönlendiricisinden geçmek için yardıma mı ihtiyacınız var?
sesler

Şu anda iki NAT'd makinesi bağlamak için ters ssh tünelleri kullanarak uygulanabilir bir çözüm var. Ancak, statik IP'si olan veya yönlendirici üzerinde bağlantı noktası iletmeyi yapılandırabileceğim bir "aracı" makine gerektirir. Bu aracıyı kesmemi sağlayacaktı. Oh iyi.
Scott


0

Biraz kirli ama kolay bir çözüm, ama netcat kullanmaya ne dersiniz? Raspberry Pi'de komutu döngüye sokan bir komut dosyası oluşturabilirsiniz:

nc <public_ip> <port1> | sh | nc <public_ip> <port2>  

Yerel sunucunuzda şunları yapın:

nc -l <port1>

Ve:

nc -l <port2>  

İlk durumda bir komut yazabilir ve ikincisinde yanıtı görebilirsiniz.


Bunun "UDP delik delme" ile ilişkisi nedir?
sesler

Bu NAT nasıl geçer?
ZEE
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.