Jak transparentnie tunelować port z IPv4 na zdalne urządzenie IPv6?

11

W domu jestem połączony z adresem IPv6, a ponadto mój dostawca zapewnia konfigurację podobną do NAT, za pośrednictwem której otrzymuję publiczny adres IPv4, który udostępniam innym klientom (oczywiście dlatego, że brakuje nam adresów IPv4).

W rezultacie nie mogę połączyć się z urządzeniami w domu (np. Bramą VPN), gdy jestem w sieci IPv4. Mam jednak serwer, który ma zarówno adres IPv4, jak i adres IPv6. Dlatego powinienem być możliwy dostęp do moich urządzeń domowych, jeśli przejdę przez mój serwer.

Oto, co mam na myśli do tej pory: Ponieważ na IPv6 każde urządzenie otrzymuje własny adres IP, mój serwer w domu otrzymuje statyczny adres IPvv6. Mój zdalny serwer ma już zarówno statyczny IPv4, jak i IPv6.

Kiedy chcę teraz połączyć się z moim serwerem OpenVPN w domu, wcześniej otwierałem port 1194 w moim routerze, a NAT przekazywał tam połączenia z serwerem. W moim nowym scenariuszu chcę połączyć się przez port 1194 (lub inny, nie ma znaczenia) na moim zdalnym serwerze i powinien on wziąć to połączenie i tunelować je na moim serwerze domowym (ponieważ oba mają IPv6).

Graficznie oznaczałoby to:

Urządzenie mobilne (IPv4) -> Serwer zdalny (IPv4 + IPv6) -> Serwer domowy (IPv6)

Ale powinno to się zdarzyć tylko na wybranych portach (czy jest jeszcze bardziej sprytny sposób niż wybieranie według portu?).

Moje pytanie brzmi: jak mogę uzyskać tę konfigurację?

Na jakim poziomie powinno to działać? Jeśli chcę to zrobić przez port, oczywiście muszę przekazać pakiet w warstwie TCP / UDP. Moim pierwszym pomysłem byłoby iptables, ale czy mogę przesłać pakiet do zdalnego adresu IP? A może istnieje inne oprogramowanie, które może? Czy powinienem utworzyć tunel między dwoma serwerami, a następnie przekazać go lokalnie? Jak miałbym to zrobić?

javex
źródło
1
Czy rozważałeś użycie brokera tunelowego IPv6 dla swojego laptopa?
Michael Hampton
@MichaelHampton dziękuję za sugestię, ale zdecydowanie wolę mieć sposób, który nie wymaga zmian na urządzeniu, ponieważ zamierzam również nawiązać połączenie z mojego telefonu (Androida) i prawdopodobnie innych urządzeń. Konfiguracja powinna być tak prosta jak wcześniej z punktu widzenia urządzeń.
javex

Odpowiedzi:

13

W końcu znalazłem rozwiązanie z przekazywaniem portów IPv4 na hosty tylko IPv6, które w zasadzie używa socat:

socat TCP4-LISTEN:22,fork,su=nobody TCP6:[2a01:198:79d:1::8]:22

Moje rozwiązanie jest w zasadzie takie samo, z wyjątkiem tego, że używam nazwy hosta, z wyjątkiem statycznego adresu IP. Uważaj, aby nie używać nawiasów kwadratowych z nazwą hosta, ponieważ wówczas będzie on interpretowany jako adres IP.

javex
źródło