Puncte:2

Cum să conectați dispozitivul TAP la rețea suprapusă?

drapel pe

Aș dori să permit utilizatorilor OpenVPN să ajungă la toate containerele Docker care fac parte din rețeaua Overlay ca și cum s-ar afla în aceeași rețea LAN. Cel mai simplu exemplu sunt 3 containere distribuite pe 2 gazde, iar gazdele sunt conectate prin rețea de suprapunere, iar toate cele 3 containere fac parte din acea rețea de suprapunere.

Pentru asta, am pregătit un container OpenVPN (OpenVPN în modul bridge cu adaptor TAP), iar în acel container am creat un bridge br0 și am legat interfețele eth0 și tap0 la br0. Prin aceasta, aș spune că mi-am conectat TAP și toți clienții OpenVPN la rețeaua de suprapunere (nu sunt sigur dacă această afirmație este corectă).

Până acum, atunci când utilizatorii mei OpenVPN se conectează la OpenVPN și încearcă să pună ping la Dummy Container 1 (care se află pe aceeași gazdă cu OpenVPN container), utilizatorii pot face ping la Dummy Container 1 (și, desigur, pot să pună ping pe containerul OpenVPN de asemenea). Până acum, bine!

Cu toate acestea, utilizatorii nu pot face ping la Dummy Container 2, care există pe a diferit gazdă (dar face parte din aceeași suprapunere cu containerul OpenVPN așa cum s-a menționat mai sus).

Deci, pe scurt, utilizatorii VPN care sunt conectați la containerul OpenVPN (conectați la rețeaua de suprapunere Docker) și încearcă să pună ping la celelalte containere pot trimite ping containerelor numai pe aceeași gazdă, nu pe cealaltă gazdă, ca și cum bridge-ul funcționează numai pe local. bridge și nu cu rețea Overlay.

De asemenea, este important să spunem că din interiorul containerului OpenVPN însuși pot da ping la Dummy Container 2 (și, desigur, la Dummy Container 1).

Această cifră asemănează întreaga poveste pe care am spus-o mai sus. Observați săgeata roșie care reprezintă conexiunea pe care aș dori să o obțin, dar nu funcționează în acest moment (utilizatorul VPN se conectează la Host 1 prin OpenVPN, apoi încercați să ping Dummy Container 2).

introduceți descrierea imaginii aici

Câteva informații tehnice detaliate

Container OpenVPN
/etc/openvpn # adresă ip
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue stare UNKNOWN grup implicit qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
2: tap0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 06:9b:33:89:85:81 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
    link/ether 02:42:0a:08:00:04 brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.4/24 scope global br0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
74: eth0@if75: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br0 state UP grup implicit
    link/ether 02:42:0a:08:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
76: eth1@if77: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP grup implicit
    link/ether 02:42:ac:12:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 172.18.0.4/16 brd 172.18.255.255 scope global eth1
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
/etc/openvpn # rută ip
implicit prin 172.18.0.1 dev eth1
10.8.0.0/24 dev br0 proto kernel scope link src 10.8.0.4
172.18.0.0/16 dev eth1 proto kernel scope link src 172.18.0.4

Configurare server OpenVPN:

portul 1194
proto udp
dev tap0
ca ca.crt
cert server.crt
cheie server.key # Acest fișier trebuie păstrat secret
dh dh.pem
ifconfig-pool-persist ipp.txt
de la client la client
menține în viață 10 120
cifrul AES-256-GCM
comprimați lz4-v2
apăsați „comprimați lz4-v2”
cheie-persiste
persist-tun
stare /var/log/openvpn-status.log
verbul 3
explicit-exit-notify 1

##### Autentificare #####
# Nu este necesar un certificat de client. Clientul trebuie să se autentifice folosind numai numele de utilizator/parola.
verify-client-cert niciunul
# Dezactivează renegocierea cheilor. Valoarea implicită este de o oră, ceea ce deconectează utilizatorul la fiecare oră și provoacă ca utilizatorul final să fie provocat să reautorizeze folosind un nou OTP.
reneg-sec 0
# Încarcă și utilizează configurația pluginului LDAP.
plugin /usr/lib/openvpn/plugins/openvpn-auth-ldap.so /etc/openvpn/auth-ldap.conf
# Încarcă și folosește pluginul PAM-auth (în principal pentru 2FA).
plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so „openvpn login USERNAME parola PAROLA PIN OTP”

Mireasa se face astfel:

openvpn --mktun --dev tap0
ip link set tap0 promisc activat

ip link adăugați nume br0 tip bridge
linkul ip setați dev br0
set link ip dev tap0 master br0
set link ip dev eth0 master br0
ip addr flush dev eth0
ip addr add 10.8.0.4/24 dev br0

OpenVPN este pornit folosind comanda

VPN_SERVER_HOST_IP_ADDRESS=10.8.0.254
VPN_NETMASK=255.255.255.0
VPN_POOL_START_IP_ADDRESS=10.8.0.50
VPN_POOL_END_IP_ADDRESS=10.8.0.100

openvpn \
    --config server.conf \
    --server-bridge $VPN_SERVER_HOST_IP_ADDRESS $VPN_NETMASK $VPN_POOL_START_IP_ADDRESS $VPN_POOL_END_IP_ADDRESS

My Dummy Container 2 (foarte similar cu Dummy Container 1, dar cu IP-uri diferite):

/ # adresă ip
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
35: eth0@if36: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue state UP
    link/ether 02:42:0a:08:00:05 brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.5/24 brd 10.8.0.255 scope global eth0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
37: eth1@if38: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth1
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
/ # rută ip
implicit prin 172.18.0.1 dev eth1
10.8.0.0/24 dev eth0 scope link src 10.8.0.5
172.18.0.0/16 dev eth1 scope link src 172.18.0.3
vidarlo avatar
drapel ar
Ai nevoie de conectivitate L2? Dacă nu, atingeți și crearea de punte este *întotdeauna* răspunsul greșit.
Mohammed Noureldin avatar
drapel pe
@vidarlo da am nevoie de el. În principal, voi avea un controler de domeniu pe cealaltă gazdă, care poate satisface anumite nevoi L2, cum ar fi imprimante, de exemplu.
vidarlo avatar
drapel ar
Controlerele de domeniu și imprimantele nu necesită conectivitate L2. Funcționează doar bine peste L3. L2 este în general implicit dacă doriți să faceți trafic non-TCP/IP.
Mohammed Noureldin avatar
drapel pe
@vidarlo Mulțumesc pentru aceste informații. Tocmai am citit pe undeva că unele imprimante pot avea probleme dacă nu sunt folosite în L2. Oricum, este interesant dacă îmi pot da seama de ce nu funcționează folosind această configurare.
Mohammed Noureldin avatar
drapel pe
@vidarlo ați putea să aruncați o privire asupra noilor detalii și să-mi spuneți dacă vă puteți da seama ce este în neregulă și de ce nu pot da ping la containerele de pe host2 de către utilizatorii VPN?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.