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
B
configuraț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 A
IP-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
.