Am câteva gazde în spatele unui router NAT pe care vreau să îl accesez printr-un VPN wireguard. Aș putea configura cu succes rețeaua privată, dar mai este ceva care mă deranjează.
Vreau ca fiecare colegi să:
- accesați unul la altul (
172.9.9.*) prin VPN (prin wg0)
- accesați orice altă gazdă din afara VPN (prin
eth0).
Iată o schemă a rețelei și a configurației curente:
âââââââ ââââââââââ ââ âââââââ
â S âââââ⤠Internet âââââ⤠A â
âââââââ âââââ¬âââââ ââ âââââââ
â
â
ââââââ´ââââââ
â NAT DHCP â
âââ⤠Router ââââ
â ââââââââââââ â
â â
ââââ´âââ ââââ´âââ
â X â â B â
âââââââ âââââââ
S este serverul VPN și este accesibil pe internet prin IP static;
X este un „server de calcul”, poate accesa internetul, dar se află în spatele unui NAT și IP-ul lui este dinamic și nu este cunoscut dinainte;
A este un „client la distanță” la care dorește să se conecteze X;
B este un „client local” la care dorește să se conecteze X și este în aceeași rețea locală.
eu vreau aia A și B se poate conecta la X prin S, dar toate aceste gazde ar trebui să folosească VPN-ul numai atunci când se contactează între ele și nu atunci când accesează internetul.
Deci, de exemplu, A poate trimite ping la google.com direct, dar va trimite ping X prin intermediul S.
După ce am căutat și citit documentații, încă nu îmi este clar dacă este posibil să fac asta fără a folosi iptables și dacă este posibil să faceți acest lucru folosind doar configurația wireguard.
Configurația actuală este următoarea:
## S wg0.conf
[Interfață]
PrivateKey = S-cheie-privată
Adresa = 172.9.9.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
[Peer]
# A
PublicKey = A-cheie-publică
IP-uri permise = 172.9.9.100/32
[Peer]
#B
PublicKey = B-cheie-publică
AllowedIPs = 172.9.9.101/32
[Peer]
# X
PublicKey = X-cheie-publică
AllowedIPs = 172.9.9.10/32
# A wg0.conf
[Interfață]
Adresa = 172.9.9.100/24
PrivateKey = A-cheie-privată
DNS = 1.1.1.1
[Peer]
PublicKey = S-cheie-publică
Punct final = S-ip-address:51820
AllowedIPs = 0.0.0.0/0, ::/0
Bconfigurația lui este similară cu A, dar cu IP 172.9.9.101 și o cheie privată diferită.
# X wg0.conf
[Interfață]
Adresa = 172.9.9.10/24
PrivateKey = X-cheie-privată
DNS = 1.1.1.1
[Peer]
PublicKey = S-cheie-publică
Punct final = S-ip-address:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25 # Pentru a menține serverul accesibil
Această configurație funcționează și toate gazdele se pot accesa una pe cealaltă prin VPN, dar vreau ca doar traficul direcționat către gazde 172.9.9.* trece prin acest VPN. Celălalt trafic va fi direcționat de către gateway-ul implicit.
Ceea ce mă nedumerește este că, dacă schimb configurația A astfel încât
AllowedIPs = 172.9.9.0/24
atunci, pentru A, pachetele sunt direcționate conform intenției (de exemplu, I can curl ifconfig.me si ia AIP-ul public al lui), dar dacă fac același lucru pe X, nu va funcționa și pachetele nu merg 172.9.9.0/24 nu vor fi livrate.
EDIT#1
Am uitat să menționez că mi-ar plăcea și dacă, atunci când mă conectez la X, clienții locali precum B nu ar trimite pachete în afara rețelei locale, deci B -> Router -> X si nu B -> Router -> S -> Router -> X.