TCP tünelini otomatik olarak yeniden bağlama


9

İki makine arasında güvenilir olmayan bir ağ bağlantım var: bazen etkin TCP bağlantıları kontrolüm dışındaki nedenlerden dolayı kesiliyor. İki makine arasında güvenilir bir TCP bağlantısı kurmak istiyorum .

Ağ güvenilir olsaydı ssh -L 1234:localhost:1234 remotehost, sunucu 1234 numaralı bağlantı noktasını dinleyerek çalışırdım remotehostve istemciyi işaret ederdim localhost:1234. Ancak ssh bağlantısı koparsa, iletilen bağlantı da aynı şekilde olur. İstemci ile sunucu arasındaki bağlantıyı otomatik olarak nasıl geri yükleyebilirim?

Sigara çözümleri:

  • Bu etkileşimli uygulamalar için değildir, bu nedenle ekran geçerli değildir.
  • Bu sadece bir SSH tünelini otomatik olarak yeniden bağlamakla ilgili değil, la autossh . Aynı tünel TCP bağlantısını kullanmaya devam etmek istiyorum, yeni bir bağlantı başlatmayın.
  • Prensip olarak, bir VPN hile yapar. Ama sadece bir TCP bağlantısı istediğimde aşırıya kaçmış gibi görünüyor ve her iki tarafta da kök izinleri olmasa bile çalışan bir çözüm istiyorum.

Sadece bunu yapan bir programın karanlık bir anısına sahibim rocks, ama web'in yüzünden düşmüş gibi görünüyor. Çoğunlukla her iki taraftaki Linux'la ilgileniyorum (bu seviyedeki bir programın diğer unices için taşınabilir olmasını beklesem de), ancak QNX ve VMS arasında çalışan bir program biliyorsanız, hepsi daha iyi.


Gilles, ssh bağlantılarınızda tcp keepalives kullanıyor musunuz? Değilse, ilk önce bunu deneyin ... bazı NAT uygulamaları hızlı bağlantıları
keser

@Mike: Bahşiş için teşekkürler. Acil bir ihtiyacım yok, ancak her iki ara yolun gelip gittiği (TCP korumalarının yarardan çok zarar verdiği) ve bir NAT'ın beni aşırı yükleyip bıraktığı durumlarla (TCP korumaları yardımcı olabilir) karşı karşıya kaldım. TCP saklayıcıları yine de sürekli bir akış için önemli olmazdı (örn. Scp), değil mi? Her halükarda bu generali korumak istiyorum: bir dahaki sefere, ne tür bir lezzetten oluşan lapa lapa ağıyla karşılaştığımda ne yapabilirim?
Gilles 'SO- kötü olmayı bırak'

Gilles, çözümler gibi sürekli akışlar için farklı scp. Bağlantı noktası yönlendirme örneğinize dayanarak w / ssh keepalives'e yanıt veriyordum. Re: lapa lapa akış aşağı hop, yapabileceğiniz pek bir şey yok, başka daha hoşgörülü olan keepalives ile bir ssh oturumu oluşturmak dışında (yani ServerAliveInterval > 0ve ile daha fazla bırakılan keepalives izin ServerAliveCountMax > 3). NAT daha düşük tutma aralıkları gerektirir. Ana sorun, sorunun ne olduğunu belirlemek ve buna göre uyarlamaktır. Seçenekleri .ssh/configher zaman sizin için orada olacak şekilde koyun
Mike Pennington

@Mike: Kullanım durumlarımdan biri, istemcinin IP'sini aşırı yüklü bir NAT'dan alması, aktif bağlantıları bile rastgele düşürmesini içeriyor (olması gerektiğinden daha fazla P2P düşünün). Birkaç saniye sonra istemci yeniden bağlanmayı başarır, ancak farklı bir IP adresi alabilir. Bu durumda TCP bağlantısının hayatta kalmasının bir yolu yoktur. Kayalar başa çıkıyor, ama bugünün sistemlerinde kutudan derlenen bir şeyi tercih ederim.
Gilles 'SO- kötü olmayı bırak'

NAT'ın size yeni IP'ler vermesi durumunda, NAT'ı düzeltmekten ya da başka bir rocksuygulama için umut etmekten daha fazlasını yapamazsınız ... Her ne kadar bu gerçek bir çamur olsa da
Mike Pennington

Yanıtlar:



1

Bu özellik ile bildiğim tek standart protokol MPTCP'dir . Uygulama katmanı için şeffaftır, bu yüzden MPTCP'nin üzerindeki SSH'nin çalışması gerekir. Altta yatan TCP bağlantılarını farklı IP'lere sahip farklı yollar üzerinde çalıştırabilir, bu nedenle prensip olarak VPN bağlantısının açık olup olmamasına bağlı olarak SSH bağlantınızı VPN bağlantısına ve dışına geçirmek için kullanılabilir.

MPTCP uygulamalarının olgunluğu hakkında fazla bir şey bilmiyorum, ancak protokolün tasarımı oldukça sağlam görünüyor.

Kesintili ağ bağlantısı nedeniyle SSH bağlantılarınızı kaybolmaya karşı korumalıdır. Sizi SSH bağlantınızı koparmak isteyen bir ortama karşı korumaz. Bir mitm, SSH'nin bağlantıyı algılayıp keseceği bozuk verileri yine de enjekte edebilir.

SSTC protokolü içine inşa MPTCP benzeri bir yeniden bağlanma yöntemi, bir bağlantıyı mümkün olan en uzun süre canlı tutmayı hayal edebileceğim yöntem olacaktır. Ancak böyle bir özelliğin SSH protokolü için tasarlandığını düşünmüyorum.


0

daemontoolsSsh portunu ileri tutmak için kullanabilirsiniz ; bağlantı kesildiğinde bağlı olarak programları canlı tutmayabilir (muhtemelen yerel bağlantı noktasının ssh bağlantısını kestiğinde bağlantılarını reddetmeye başlayacaktır), ancak bu bir başlangıçtır.

Ben iptablesssh ileri gider gitmez o port DROP paketlerine neden gibi bazı hileler olduğundan şüpheleniyorum , bu yüzden bağlantı programları sadece paketlerin kaybolduğunu, reddedilmedi biliyorum. Ben sadece daemontools(tekrar) kendimi öğreniyorum, bu yüzden bir hizmet öldüğünde özel bir komut dosyası çalıştırabileceğinizden emin değilim, ama yapabileceğinizden şüpheleniyorum.


-2

TCP bunu otomatik olarak yapar. Yalnızca can sıkıcı TCP bağlantılarını öldürmek için kullanılan tipik pratik temizleme saldırılarını devre dışı bırakmanız veya zayıflatmanız gerekir. Bağlantınız için TCP korumasını devre dışı bırakın ve aşırı yeniden iletim sınırını büyük ölçüde artırın. Örneğin Linux'ta içine büyük bir sayı yazın /proc/sys/net/ipv4/tcp_retries2.

Bununla birlikte, modern bir ağda, durum bilgisi olan bir paket denetimi güvenlik duvarı, paketleri düzenli olarak değiştiremeyen bir TCP bağlantısını unutacaktır, bu yüzden geçit töreninize yağmur yağabilir.


1
Her uç noktanın statik bir IP adresi olduğu ve durum bilgisi olan orta kutular olmadığı sürece TCP'nin durumu işleyebildiği doğrudur. Soru, reasons beyond my controldinamik IP veya durum bilgisi olan orta kutular olarak okuduğumdan bahsediyor. Bu tür senaryolarda TCP tutma biraz yardımcı olabilir. Ancak TCP tutmayı nasıl yapılandırırsanız yapın, yeniden başlatıldığı için bir orta kutu durumunu kaybettiğinde bağlantıyı canlı tutmak yeterli olmaz.
kasperd

@kasperd katılıyorum. Ancak, bu durumlarda bir TCP bağlantısını açık tutmaya çalışmak boşuna olur. Bu nedenle, sorgulayıcının bu zorluklarla karşılaşmadığını varsaydım.
aecolley

Her iki uç noktasını da kontrol edip MPTCP desteği ile bir yığına yükseltebiliyorsanız boşuna olmaz. Ayrıca, MPTCP'ye ihtiyaç duymadan TCP'nin üzerine bir uygulama katmanı çözümü uygulanabilir.
kasperd
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.