1 (edytowany przez cyniu88 2026-09-11 08:50:28)

Temat: WireGuard dual-stack – IPv4 transport, IPv4 + IPv6 w tunelu

mam router z OpenWrt i ISP daje mi zarówno IPv4, jak i IPv6. Lokalnie wszystko działa bardzo dobrze – urządzenia w LAN mają dostęp do obu protokołów.

Widzę też w AdGuard Home, że sporo ruchu wychodzi po IPv6. Co ciekawe, są również domeny/usługi dostępne wyłącznie po IPv6, które z sieci domowej działają bez problemu.

Mam natomiast pytanie dotyczące WireGuarda.

Chciałbym uzyskać następujący scenariusz:

```text
Telefon (Internet mobilny – tylko IPv4)
              │
              │ IPv4
              ▼
       [ WireGuard ]
        OpenWrt
              │
       ┌──────┴──────┐
       │             │
      IPv4           IPv6
       │             │
       └──────┬──────┘
              ▼
        Internet
```

Czyli:

* telefon jest poza domem i korzysta z sieci komórkowej, która daje mu tylko IPv4,
* telefon łączy się z moim serwerem WireGuard **po IPv4**,
* ale po zestawieniu tunelu chciałbym, żeby przez WireGuarda szedł zarówno ruch IPv4, jak i IPv6,
* IPv4 telefonu ma być transportem do serwera WG,
* natomiast IPv6 ma być dostarczane telefonowi przez mój domowy router, wykorzystując jego natywne połączenie IPv6 od ISP.

Innymi słowy: zależy mi na dual-stack w tunelu WireGuard, nawet jeśli sieć, w której aktualnie znajduje się telefon, obsługuje tylko IPv4.

Czy jest to możliwe na OpenWrt?

Jeżeli tak, to jak najlepiej to skonfigurować?


Chciałbym, żeby telefon po połączeniu z WG zachowywał się praktycznie tak, jakby był w mojej sieci domowej – IPv4 + IPv6, niezależnie od tego, czy aktualna sieć komórkowa telefonu ma IPv6.

Czy ktoś ma taki układ działający na OpenWrt i może podać przykład konfiguracji?

2 (edytowany przez cyniu88 2026-09-11 14:36:23)

Odp: WireGuard dual-stack – IPv4 transport, IPv4 + IPv6 w tunelu

udało mi się ogarnąć  temat z GPT

na koniec wypluł mi taki manual  dla potomnych
IPv6 na Androidzie przez WireGuard, gdy lokalne Wi-Fi nie ma IPv6

Cel

Mam router OpenWrt z dostępem do Internetu po IPv6 oraz działający serwer WireGuard.

Chcę, aby telefon z Androidem, będąc np. w hotelu, pracy albo w publicznym Wi-Fi, które udostępnia tylko IPv4, mógł korzystać również z IPv6.

Schemat:

INTERNET
IPv4 + IPv6
^
|
+----+-----+
|  OpenWrt |
|          |
| WAN IPv4 |
| WAN IPv6 |
| WireGuard|
+----+-----+
|
WireGuard przez IPv4
|
+----+-----+
| Android  |
|          |
| Wi-Fi    |
| tylko    |
| IPv4     |
+----------+

1. Założenia

Przykładowa konfiguracja:

OpenWrt LAN:
192.168.50.1/24

WireGuard:
wg0
10.99.0.1/24
port 51820

Android:
10.99.0.2/32

IPv6 WireGuard:
fd42:1234:5678::1/64    OpenWrt
fd42:1234:5678::2/64    Android

Adresacja:

OpenWrt wg0:
10.99.0.1
fd42:1234:5678::1

Android:
10.99.0.2
fd42:1234:5678::2

Zakres:

fd42:1234:5678::/64

jest przykładową prywatną adresacją IPv6 ULA.

Nie używamy tutaj bezpośrednio publicznego prefixu IPv6 otrzymanego od ISP.

OpenWrt będzie wykonywał NAT66:

fd42:1234:5678::2
|
v
OpenWrt
|
| NAT66
v
Publiczny IPv6 ISP
|
v
Internet IPv6

Dzięki temu zmiana publicznego prefixu IPv6 przez ISP nie wymaga zmiany konfiguracji telefonu.

2. Dodanie IPv6 do WireGuarda na OpenWrt

Najpierw sprawdzamy istniejący interfejs:

uci show network.wg0

Jeżeli wg0 już istnieje i działa, nie trzeba go tworzyć od nowa.

Dodajemy do niego adres IPv6:

uci add_list network.wg0.addresses='fd42:1234:5678::1/64'

Następnie:

uci commit network
/etc/init.d/network reload

Sprawdzamy:

ip -6 addr show dev wg0

Powinniśmy zobaczyć między innymi:

inet6 fd42:1234:5678::1/64 scope global

3. Konfiguracja klienta WireGuard na Androidzie

W aplikacji WireGuard na Androidzie otwieramy konfigurację istniejącego tunelu.

W sekcji

[Interface]

dodajemy adres IPv6:

[Interface]
PrivateKey = KLUCZ_PRYWATNY_ANDROID
Address = 10.99.0.2/32, fd42:1234:5678::2/64
DNS = 10.99.0.1

Najważniejsza zmiana:

fd42:1234:5678::2/64

Telefon dostaje dzięki temu własny adres IPv6 wewnątrz tunelu.

4. AllowedIPs na Androidzie – bardzo ważne

W konfiguracji peera na Androidzie:

[Peer]
PublicKey = KLUCZ_PUBLICZNY_OPENWRT
Endpoint = 198.51.100.10:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Najważniejszy fragment:

AllowedIPs = 0.0.0.0/0, ::/0

Oznacza to:

IPv4 -> przez WireGuard
IPv6 -> przez WireGuard

Telefon używa tunelu jako domyślnej drogi do Internetu.

Jeżeli chcemy tylko IPv6 przez VPN, a IPv4 ma nadal wychodzić lokalnym Wi-Fi, możemy użyć:

AllowedIPs = ::/0

Wtedy:

IPv4 -> lokalne Wi-Fi -> Internet

IPv6 -> WireGuard -> OpenWrt -> Internet IPv6

5. Dodanie IPv6 do peera Androida na OpenWrt

Peer telefonu powinien mieć zarówno IPv4, jak i IPv6.

Przykład:

[Peer]
PublicKey = KLUCZ_PUBLICZNY_ANDROID
AllowedIPs = 10.99.0.2/32, fd42:1234:5678::2/128

Jeżeli w konfiguracji UCI masz już:

10.99.0.2/32

nie dodajemy go drugi raz.

Dodajemy tylko:

uci add_list network.@wireguard_wg0[0].allowed_ips='fd42:1234:5678::2/128'

Następnie:

uci commit network
/etc/init.d/network reload

Uwaga: nazwa sekcji UCI może być inna. Najpierw warto sprawdzić:

uci show network | grep -A10 -B2 wireguard

6. Firewall OpenWrt

OpenWrt musi pozwolić na ruch:

wg0 -> WAN

Jeżeli WireGuard znajduje się w osobnej strefie vpn, konfiguracja logicznie powinna wyglądać tak:

vpn
|
| forwarding
v
wan

Przykładowo:

uci add firewall forwarding
uci set firewall.@forwarding[-1].src='vpn'
uci set firewall.@forwarding[-1].dest='wan'

W strefie vpn powinien znajdować się interfejs:

wg0

Następnie w strefie WAN włączamy NAT66:

uci set firewall.wan.masq6='1'

Sprawdzamy konfigurację:

uci show firewall | grep -E "name=.*wan|masq6|vpn|wg0"

Po zmianach:

uci commit firewall
/etc/init.d/firewall restart

7. Sprawdzenie routingu IPv6 na OpenWrt

Na routerze:

ip -6 route

Powinniśmy mieć działającą trasę domyślną IPv6, np.:

default via ... dev wan

Następnie sprawdzamy dostęp do Internetu IPv6:

ping -6 2001:4860:4860::8888

Jeżeli ping działa, OpenWrt ma działający dostęp do Internetu IPv6.

8. Sprawdzenie WireGuarda

Na OpenWrt:

wg show

Powinniśmy zobaczyć peer Androida oraz:

latest handshake

i rosnące wartości:

transfer: ... received, ... sent

Jeżeli handshake działa, ale IPv6 nie działa, problem najczęściej znajduje się w:

  • AllowedIPs

  • routingu IPv6

  • firewallu

  • NAT66

9. Test IPv6 z telefonu

Włączamy tunel WireGuard na Androidzie.

Telefon może być podłączony do Wi-Fi, które posiada:

IPv4: TAK
IPv6: NIE

Po uruchomieniu WireGuarda telefon powinien mieć adres:

fd42:1234:5678::2

wewnątrz tunelu.

Następnie otwieramy:

https://test-ipv6.com/

Można również użyć:

https://ipv6-test.com/

Jeżeli konfiguracja jest poprawna, telefon powinien mieć dostęp do Internetu IPv6.

10. Jak działa całość?

Telefon chce odwiedzić serwer IPv6:

2001:4860:4860::8888

Normalnie nie miałby którędy wysłać pakietu, ponieważ lokalne Wi-Fi nie posiada IPv6.

Po uruchomieniu WireGuarda:

Android
fd42:1234:5678::2
|
| IPv6
v
WireGuard
|
| tunel UDP/IPv4
v
OpenWrt
fd42:1234:5678::1
|
| NAT66
v
WAN IPv6
|
v
Internet IPv6

Odpowiedź wraca tą samą drogą:

Internet IPv6
|
v
OpenWrt
|
v
NAT66
|
v
WireGuard
|
v
Android

11. DNS

Możemy użyć DNS routera:

DNS = 10.99.0.1

Jeżeli OpenWrt/DNSMasq odpowiada na adresie WireGuard, telefon będzie wykonywał zapytania DNS przez VPN.

Można również użyć publicznego DNS:

DNS = 1.1.1.1

lub:

DNS = 8.8.8.8

Przy:

AllowedIPs = 0.0.0.0/0, ::/0

ruch DNS również będzie przechodził przez tunel.

12. Wariant tylko IPv6 przez VPN

Jeżeli nie chcemy, aby cały ruch telefonu przechodził przez domowy Internet, możemy zrobić wariant tylko dla IPv6.

Android:

[Interface]
Address = 10.99.0.2/32, fd42:1234:5678::2/64
DNS = 10.99.0.1

[Peer]
PublicKey = KLUCZ_OPENWRT
Endpoint = 198.51.100.10:51820
AllowedIPs = ::/0
PersistentKeepalive = 25

Wtedy:

IPv4
|
v
lokalne Wi-Fi
|
v
Internet

IPv6
|
v
WireGuard
|
v
OpenWrt
|
v
Internet IPv6

Jest to bardzo przydatne, jeżeli chcemy tylko dodać IPv6 do sieci, która go nie posiada.

13. Co z dynamicznym prefixem IPv6 od ISP?

To rozwiązanie ma tutaj dużą zaletę.

ISP może zmienić np.:

2001:db8:1234:5678::/64

na:

2001:db8:1234:abcd::/64

Telefon nadal ma:

fd42:1234:5678::2

a OpenWrt wykonuje NAT66 na aktualny publiczny IPv6.

Dlatego konfiguracja Androida nie musi być zmieniana po każdej zmianie prefixu IPv6 przez ISP.

14. Najczęstsze problemy

Problem 1 – WireGuard nie ma handshake

Sprawdzamy:

wg show

Jeżeli nie ma:

latest handshake

problem dotyczy samego WireGuarda, Endpointu, portu lub firewalla.

Problem 2 – handshake jest, ale IPv6 nie działa

Sprawdzamy na Androidzie:

AllowedIPs = 0.0.0.0/0, ::/0

albo dla wariantu tylko IPv6:

AllowedIPs = ::/0

Na OpenWrt peer powinien mieć:

10.99.0.2/32
fd42:1234:5678::2/128

Problem 3 – OpenWrt ma IPv6, ale Android nie ma Internetu IPv6

Sprawdzamy:

sysctl net.ipv6.conf.all.forwarding

Powinno być:

net.ipv6.conf.all.forwarding = 1

Jeżeli nie:

sysctl -w net.ipv6.conf.all.forwarding=1

Problem 4 – IPv6 działa na OpenWrt, ale nie działa przez WireGuard

Sprawdzamy NAT66:

uci show firewall | grep masq6

Powinno być:

masq6='1'

oraz forwarding:

vpn -> wan

15. NAT66 czy routing IPv6 bez NAT?

W tym poradniku wykorzystujemy:

ULA IPv6
|
v
NAT66
|
v
publiczny IPv6 ISP

Jest to najprostsze rozwiązanie dla telefonu.

Alternatywnie można zrobić prawdziwy routing IPv6 bez NAT66, przydzielając klientowi WireGuard publiczny adres/prefix routowany przez OpenWrt.

To rozwiązanie jest bardziej eleganckie, ale wymaga odpowiedniej adresacji/prefixu od operatora.

Dla typowego domowego zastosowania WireGuard + Android + zmienny prefix IPv6 NAT66 jest znacznie prostszy.

Podsumowanie

Nie potrzebujemy IPv6 w sieci Wi-Fi, do której podłączony jest telefon.

Wystarczy:

Wi-Fi
|
| IPv4
v
WireGuard
|
v
OpenWrt
|
| IPv6 + NAT66
v
Internet IPv6

Najważniejsze elementy konfiguracji:

OpenWrt:

wg0 = 10.99.0.1/24
wg0 = fd42:1234:5678::1/64

Android:

Address = 10.99.0.2/32, fd42:1234:5678::2/64

Android – Peer:

AllowedIPs = 0.0.0.0/0, ::/0

lub tylko IPv6:

AllowedIPs = ::/0

OpenWrt – Peer:

AllowedIPs = 10.99.0.2/32, fd42:1234:5678::2/128

Firewall:

vpn -> wan
masq6 = 1

Efekt:

Android
|
| Wi-Fi IPv4
v
WireGuard
|
| tunel IPv4
v
OpenWrt
|
| NAT66
v
Internet IPv6

Telefon może korzystać z IPv6 przez domowy router, mimo że lokalna sieć Wi-Fi nie udostępnia IPv6.

3

Odp: WireGuard dual-stack – IPv4 transport, IPv4 + IPv6 w tunelu

Czy w konfiguracji z NAT66 nie jest tak, że klienci lokalni też są NATowani? Pod jakim adresem widać urządzenia na sprawdzajkach jak https://myip.wtf ?

4

Odp: WireGuard dual-stack – IPv4 transport, IPv4 + IPv6 w tunelu

Ciekawe bo strona którą mi podesłałeś nie pokazuje w ogóle adresu ipv6 kiedy jestem połączony i VPN, ale już aplikacja Net Analyzer na Androida ten adres ipv6 pokazuje tyle że prefiks sieci jest inny niż kiedy jestem w Lan

Ps strona https://test-ipv6.run/ pokazuje ten sam adres ipv6 co apka czyli inny niż bezpośrednio w Lan

5

Odp: WireGuard dual-stack – IPv4 transport, IPv4 + IPv6 w tunelu

Chodzi o to, że gdy włączysz masq6 na strefie wan, wtedy również lokalni klienci są NATowani i wszyscy wychodzą tym samym adresem IPv6 na świat. Można dodać do konfiguracji selektywne NATowanie i to rozwiązuje tę kwestię:

uci add_list firewall.wan.masq_src='fd42:1234:5678::1/64'

W kwestii dlaczego https://myip.wtf nie pokazuje IPv6: wygląda na to, że (na Androidzie) jeśli wychodzisz na świat przez tunel Wireguard, aplikacje preferują używanie IPv4, a przynajmniej tak pokazuje mi https://test-ipv6.run: "Your browser uses IPv6 by default".

Podsumowując: wszystko fajnie, IPv6 działa na kliencie, ale czy da się to zrobić bez NAT, a otrzymywany od operatora prefix /56 jest dynamiczny?

6 (edytowany przez cyniu88 2026-09-14 08:45:35)

Odp: WireGuard dual-stack – IPv4 transport, IPv4 + IPv6 w tunelu

Zrobiłem test i u mnie klienci po VPN mają wspólny adres ipv6 ale hosty z LAN mają własne unikalne, albo nadane przez DHCP albo losowane jak dla Androida , nie wiem czy mam stały czy zmienny prefiks od operatora, inteligencja białkowa na infolinii też nie wie, od miesiąca mam ten sam

7

Odp: WireGuard dual-stack – IPv4 transport, IPv4 + IPv6 w tunelu

U mnie bez dodania masq_src wszystkie hosty z LAN i VPN wychodzą przez wspólny adres IPv6 - dostają "swój", ale świat widzi ten sam.

Docelowo chciałbym zrobić tak, żeby klienci Wireguard dostawali adresy GUA i z tego co czytam, wymaga to dodania osobnego interfejsu WG dla każdego klienta, który taki adres ma dostać.

8

Odp: WireGuard dual-stack – IPv4 transport, IPv4 + IPv6 w tunelu

Konfiguracja, która działa bez NATowania i pozwala na przypisanie GUA została opisana tutaj: https://forum.openwrt.org/t/automatic-g … ent/138033

Trzeba pamiętać o jednej kwestii: dla każdego klienta trzeba stworzyć osobny interfejs.

Sprawdziłem na ten moment klienta - telefon z Androidem. Kolejny krok - klient w postaci routera z OpenWRT i przekazywanie adresów do LAN. smile