Mă confrunt cu această problemă de aproape două luni. O sa explic situatia. Lucrez de acasă și pentru a accesa majoritatea serviciilor companiei mele trebuie să folosesc un client openvpn. Chestia este că am trei computere acasă, un server de uz general, computerul personal și un laptop de companie. Am configurat deja cu mult timp în urmă un nat și rute de acces de pe computerul meu personal la serverele companiei trecând prin clientul openvpn care rulează pe laptopul meu. Sunt îngrijorat de baterie pentru că o las să pornească în fiecare zi conectată la încărcătorul său, așa că după ce m-am gândit mult am decis să mut clientul openvpn într-un container de pe serverul meu pentru a-l folosi ca router pentru a se conecta la serverele companiei.
Am configurat containerul folosind un macvlan cu un interval de ip al rețelei mele locale, permisiuni privilegiate și net_admin. După luni de încercare și eroare, am făcut-o să funcționeze o dată, apoi serverul meu a murit și am uitat ce iptables am pus pe container pentru a-l face să funcționeze. Nu l-am scris în scenariul de intrare din cauza lipsei de timp și acum trebuie să mă ocup din nou de asta.
Tot ce este pe serverul openvpn, rețeaua companiei și serverele știe cum să direcționeze înapoi fiecare ip al clienților vpn.
Ceea ce trebuie să fac acum este să îmi direcționez rețeaua locală prin clientul openvpn în interiorul unui container.
Detalii:
- Rețea locală: 192.168.0.0/24
- Gateway local: 192.168.0.1
- PC:192.168.0.17
- Server de acasă: 192.168.0.16
- Container: 192.168.0.242
- Client OpenVPN: 10.1.2.4
- Gateway OpenVPN: 10.1.2.1
- Gama de servere a companiei: 192.168.2-19.0/24
Pe serverul meu de acasă (192.168.0.16) funcționează perfect. A trebuit doar să adaug câteva rute care indică IP-ul containerului astfel. ruta ip adăugați 192.168.19.0/24 prin 192.168.0.242
Dar ceea ce nu pot să lucrez este restul rețelei locale. Pe computerul meu personal am configurat un router care indică IP-ul containerului (192.168.0.242) pentru gama de servere a companiei, așa cum am făcut pe serverul meu.
Dacă lansez un ping la oricare dintre ele, pot vedea cu tcpdump și tshark că ajunge la destinație pe cealaltă parte (PC > Home Server > Container > VPN Client > VPN Server > Gateway > Server) Acesta ajunge la destinație așa cum a fost prevăzut, dar când se întoarce la computerul meu (Server > Gateway > Server VPN > Client VPN)
Răspunsul ping revine și moare pe container, așa că problema pe care trebuie să o rezolv acum este cum să fac containerul să nat sau să transmit acel pachet către computerul meu personal.
Știu sigur că doar regulile iptables trebuie să adaug sau să le elimin în interiorul containerului.
Pe punctul meu de intrare am aceste iptable-uri care sunt încărcate după ce pornește clientul vpn deschis.
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,STABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
Dacă merită menționat doar cu aceste reguli, l-am făcut să funcționeze pe laptopul meu.
De asemenea, containerul poate ajunge la orice de pe ambele părți, trimite ping la unul dintre serverele companiei și face ping la propria gazdă sau face ping perfect la computerul meu personal.