İpv6'yı ipv4'e iletmek için iptables'ı kullanın?


16

Şu anda, düzeltmek için sonsuza kadar sürecek yapılandırma nedeniyle, sadece ipv4 tarafından erişilebilen bir sunucum olduğu bir kurulum var. Bununla birlikte, ipv6 ile erişilebilen bir sunucum da var. IPv4 trafiği kullanarak sunuculardan birinden başka bir sunucuya belirli bir bağlantı noktasındaki ipv6 trafiğini iletmek için iptables kullanabilir miyim diye merak ediyordum.


2
Aradığın şey, iptables'ın (henüz) yapacağını sanmıyorum NAT64 olarak adlandırılıyor.
Chris S

Chris doğru - NAT64 RFC'ler yayınlandı, bir şey gerçekten destekleyene kadar bir süre verirdim. Bununla birlikte, hedefinizi farklı bir şekilde gerçekleştirebilirsiniz, ancak kesin olarak bilecek kadar ayrıntımız yok. Örneğin, bir HTTP sunucusuysa, protokoller arasındaki istekleri tersine bağlayabilirsiniz.
Shane Madden

Yanıtlar:


16

IPtables şu anda bunu yapamıyor, bu nedenle bağlantıları proxy yapmak için bir kullanıcı alanı işlemine ihtiyacınız var. socat bunun için uygun bir araçtır:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234

1
teşekkürler, bu yardımcı oldu! Herkesin bir UDP çözümü araması durumunda: socat UDP6-RECVFROM: 64444, çatal UDP4-SENDTO: localhost: 64443 benim için çalıştı
Alexander

10

Sorunuzla ilgili yorumlarda belirtildiği gibi , NAT64 3 yıl sonra bile hazır olmaktan çok uzak.

Bununla birlikte, 6tunnelşaşkınlığın önerdiği gibi deneyebilirsiniz .

Neyse ki, Debian ve Ubuntu depolarında bulunur, böylece kullanarak çok kolay bir şekilde kurabilirsiniz sudo apt-get install 6tunnel. Başka bir sistem kullanıyorsanız, onu kaynaktan oluşturmanız gerekir .

Kaynaktan inşa etmek gerçekten zor değildir ve sadece bazı komutları (kök olarak) çalıştırma meselesidir:

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install

İşte söz dizimi, basitleştirilmiş:

6tunnel [-4|-6] [-l local-host] original-port destination-host destination-port
  • Bu [-4|-6]isteğe bağlıdır ve IPv4 veya IPv6'ya (sırasıyla) bağlanıp (dinlemeyeceğinizi) belirtmenizi sağlar.
  • -layrıca isteğe bağlıdır. Hangi adresi (IPv4 veya IPv6) bağlamak istediğinizi seçmenizi sağlar.
  • Orijinal liman Ciltlenmesini edeceğiz hangi bağlantı noktasıdır.
  • Hedef host Eğer trafik ileteceğiz burasıdır. Herhangi bir yerde olabilir: localhost veya ağınızda veya İnternet'te başka bir yerde.
  • Hedef bağlantı noktası Yönlendirilen trafik alacak olan hedef ana bilgisayarda bağlantı noktasıdır.

Örneğin, 1337 numaralı bağlantı noktasını dinleyerek yalnızca IPv4 sunucusuna IPv6 üzerinden erişilmesine izin vermek istiyorsanız, şunu kullanın:

6tunnel -6 1337 localhost 1337

Yukarıdaki komut IPv6'daki 1337 numaralı bağlantı noktasını dinler ve trafiği IPv4 aracılığıyla aynı makinedeki 1337 numaralı bağlantı noktasına iletir. Daha sonra arka planda çalışır, bu yüzden endişelenmenize gerek yoktur.

Aslında, hala çalıştığından emin olmak için bir cron işi ayarlamalısınız. size kolaylık sağlamak için 6tunnelbir örnek sunar ! Önyüklemede çalıştırmak da kötü bir fikir olmamalı.

Daha fazla dokümantasyon için 6tunnel -hveya komutunu çalıştırın man 6tunnel.


Mevcut cevabı şaşkınlıkla düzenlemek çok fazla değişeceği ve önerilen bir düzenleme olarak reddedilebileceği için yeni bir cevap olarak yayınlamak!
Léo Lam

5

Son sürümleri xinetdde IPv6'yı dinleyebilir ve ardından bağlantıyı bir IPv4 adresine iletebilir.

3389 numaralı bağlantı noktasındaki IPv6 bağlantılarını dinleyen ve bunları dahili bir IPv4 adresinin 3389 numaralı bağlantı noktasına ileten örnek bir yapılandırma:

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}

xinetdTemel sisteminize kurulması veya onaylı satıcı depolarında bulunması muhtemel olduğundan , bu daha kısıtlı ortamlarda faydalı olabilir .


3

Leo Lams'ın cevabı ve oyu hakkında yorum yapmak istedim, ancak yeterli itibarım yok. Her şeyden önce: Çok teşekkür ederim Leo Lam!

Bu iş parçacığı boyunca gelen herkes için: ISS bağlantımı IPv4'ten IPv6'ya Dual Stack Lite ile değiştirdi, yani artık kendi IPv4 adresim yok. IP Kamerama IPv6'yı desteklemeyen herhangi bir yerden erişmek istediğim için bu bir sorundu. Bu sorunu çözmek için aşağıdakileri denedim:

  1. Ubuntu makineme Yönlendiricimdeki bağlantı noktası 99 için IPv6 İletme özelliğini etkinleştirme.
  2. Ubuntu makinesi (ev ağı): sudo 6tunnel -6 99 192.168.178.35 80
  3. Statik IPv4 ve IPv6 adresli vServer Debian: sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian: iptables'da 99 numaralı bağlantı noktasından gelen tcp bağlantılarına izin ver

İpv6 öneki yönlendiricimde belirtildi ve arayüz kimliği IPv6 yönlendirme işleminde eşlendi.

Şimdi vServer etki alanı example.com:99 kullanarak her yerden kameraya erişebiliyorum .. Mükemmel! Ya bu işi yerine getirecek bir ahududu ya da diğer görevler için bir muz pi m3 almayı planlıyorum.


1
Artık başka bir IP kameraya ihtiyacınız olduğunda ne yapacağınızı biliyorsunuz. 2015; IPv6'yı desteklemeyen bir tane satın almak tam bir para kaybıdır.
Michael Hampton

kamera bir kaç yaşında gibi değil: p
Crumar

2

Bu sayfayı OP'den çok daha fazla insanın yararına daha fazla (Ben buraya bir IPv4 (Twisted) uygulaması için IPv6 bağlantısına bir çözüm aramaya geldim) için bir olasılık, bir uygulama 6 tüneli, IPv6 üzerinde dinliyor ve istekleri başka bir arayüze iletiyor ve Liman.

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.