Trafiği IP adresi yerine dinamik bir DNS adına yönlendirmek için iptables kullanımı?


0

Statik IP adresli bir Debian sunucum var. Ayarlamak istiyorum, böylece bu sunucuya belirli bir bağlantı noktası kullanarak bağlanırsam, bu trafiği ev ağıma yönlendirecek.

Bu gibi iptables kullanarak çalışan var:

iptables -t nat -A PREROUTING -p tcp --dport [port] -j DNAT --to [home-ip]:[port]
iptables -t nat -A POSTROUTING -d [home-ip] -j MASQUERADE

Sorun şu ki, ev ağımın dinamik bir IP adresi var. Değişir değişmez (yeterince sık görülür) bu çalışma durur.

Ancak, ev IP adresim için ayarlanmış bir dinamik DNS adım var.

Yine de, iptables kullanmak, bu trafiği her zaman dinamik DNS adımın çözümlediği IP'ye yönlendirmek için var mı?

Yanıtlar:


1

IPTables anında DNS çözümlemesini desteklemiyor çünkü güvenlik, performans ve uygulama konularını içeriyor.

Birisi etki alanınız için DNS kayıtlarını değiştirebilseydi, IPTables kurallarını etkiler.

IPTables gelen her pakette bir DNS araması yaptıysa ve hatta bağlantı başlatma paketinde bir arama yaptıysa, gerçekten yavaştır.

Ayrıca, bir etki alanı adı için birden fazla A kaydı varsa, IPTables hangisini kullanır?

Aradığınızı başarmak için, IPTable'ları çalıştıran ana bilgisayarın, dinamik ana bilgisayar adınızın IP adresini ne zaman düzenli olarak kontrol edeceği ve ardından kurallarını buna göre değiştireceğiniz bir sistem uygulamanız gerekir.

Diğer bir alternatif de bilgisayarınızda mevcut genel IP adresini izleyen ve ardından IPTable'ları yeniden yapılandıran IPTables sunucunuza gönderen ev ağınızda bir yazılıma sahip olmak olacaktır.

Bunu sizin için yapabilecek özel bir yazılım bilmiyorum.


1

Tero Kikanen tarafından çok iyi açıklanan nedenlerden dolayı iptables , istediğin şeyi yapma aracı değil. Bunun yerine ssh kullanmalısınız.

Hadi arayalım:

  1. ana bilgisayar yerel bilgisayarınız;

  2. Debian sunucunuzu hostB;

  3. ev sahibi PC'nizi hostC.

Örneğin, ssh oturumunuzu iletmek istiyorsanız , pc hostA üzerine , .ssh / config dosyasına şu satırı eklemeniz gerekir :

Host hostC
ProxyCommand ssh hostB -W %h:%p

ve kimlik bilgilerini giriş emin olun hostC üzerinde Hosta . Şimdi, hostA'dan hostC'ye aşağıdaki gibi bağlanabilirsiniz:

ssh me@hostc

Bu, sen do not IP adreslerini kullanmak gerekir, çözümlenmemiş isimler gayet güzel. Ayrıca, Proxy Komutu dosyasına veya CLI'ye (seçeneğin B-> C bağlantısı için olmasına bağlı olarak değişir) veya her türlü seçeneği (bağlantı noktası, şifreleme anahtarı dosyası, kullanıcı vb. Gibi) ekleyebilirsiniz. sırasıyla A-> B bağlantısı için).

Aynı şekilde, hostA'daki belirli bir portu (portA), hostB'nin aracısı aracılığıyla hostC'nin aracılığından farklı bir porta (portC) aşağıdaki gibi iletebilirsiniz:

ssh -L portA:hostC:portC me@hostB

Bir kez daha, IP adreslerini kullanmaya gerek yok, basit isimler olacak. Bir diğer önemli avantajı ssh tüm iletişim otomatik olarak şifrelenir, böylece kimse ne yaptığınızı görmek mümkün olacak olmasıdır.

Son olarak, bir (vermeyi nasıl bilmiyorsanız ücretsiz! Statik bir IP adresi (hostC) olmadan bir pc) adını, sadece kontrol noip oldukça basittir.


Maalesef bu çözüm benim için kullanılamıyor, çünkü hostA bir iOS cihazıdır ve ssh ile herhangi bir karmaşık yönlendirme yapabilme özelliğine sahip değildir. Yönlendirme şeffaf bir şekilde hostA'ya gerçekleşmelidir.
GuyGizmo

@GuyGizmo Önerdiğim şey iOS'ta yapılabilir, burada okuyun, apple.stackexchange.com/questions/69163/…
MariusMatutiae

Ayrıca, kurduğum şeyin "tek tıklamayla" bir işlem olduğunu, özellikle bilgisayar okur yazar olmayan kullanıcılar için olduğunu belirtmeliyim, bu yüzden bir SSH istemcisi indirme ve tünel oluşturma için yapılandırmalarını istemiyorum. uygulanabilir bir çözüm olabilir. Yönlendirmenin iOS'a şeffaf olması neredeyse zor bir gerekliliktir. Hepsi senin çözümünün iyi olduğunu söyledi. Bu örnekte benim için doğru değil.
GuyGizmo
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.