Macmiil wuxuu wacaa server-ka OpenVPN ee VM ku yaal Compute Engine, daaqadda xaaladdu waxay leedahay xiriir, ping-ka loo diro host ku yaal VPC weli meelna ma gaaro. Dareenka waa in lagu daro line push kale, taasina waligeed ma hagaajiso. Compute Engine waxay go'aansataa halka packets-ku tagaan iyadoo adeegsanaysa shaxda route-keeda iyo cinwaannada ay interface-ka VM dhab ahaan haysto, sidaas darteed pool tunnel oo VM aan lahayn waa pool aan cidna gaarsiin.

Raac packet-ka fashilma halkii aad raaci lahayd faylka configuration-ka, qaybaha maqan waxay u soo bixi doonaan si isku xigta.

Ka bilow packet-ka dhinta

SYN wuxuu ka baxaa macmiilka, wuxuu galayaa tunnel-ka oo wuxuu gaarayaa VM sida packet la duubay oo loo dirayo meel ku taal VPC. OpenVPN wuu furaa oo isku dayaa inuu ka gudbiyo eth0, halkaas oo fabric-ku hal su'aal ka hor wax kasta kale: instance-kan ma leeyahay cinwaanka loo socdo. Pool tunnel laga soo gooyay subnet qof kale wuu ku guuldareystaa su'aashaas, packet-kana waa la tuuraa ka hor inta aan la eegin route ama qaanuun firewall ah.

Marka jihada macmiilka ilaa VPC waxay leedahay laba shuruudood oo kala duwan, midkoodna ma aha tilmaan push. VM wuxuu u baahan yahay xad alias oo daboola pool tunnel-ka, taasina waa waxa ka dhigaya milkiile sharci ah cinwaannadaas. VPC wuxuu u baahan yahay route magacaabaya VM sida next hop ee prefix kasta oo la ilaaliyay. Mid haddii uu maqnaado packet-ku meel kale ayuu ku dhintaa, halka macmiilku arkayo aamusnaanta isku midka ah.

U akhri fashilka habkaas, sababtoo ah dhinaca macmiilka labada shuruudood waxay u eg yihiin isku mid. Tunnel sheegaya xiriir iyadoo aan waxba jawaabayn waa calaamad dhibaato topology, ma aha cipher xun.

Instance-ku ma leeyahay pool tunnel-ka

VM sii xad labaad oo ku dhex yaal subnet-kiisa, ka dibna OpenVPN ha u qaybiyo cinwaanno si sax ah xadkaas. Instance cinwaankiisa koowaad yahay 10.156.0.10/20, alias /28 wuxuu pool-ka ka soocaa cinwaannada instance-yada kale hore u haystaan:

gcloud compute instances network-interfaces update openvpn-vm \
  --zone=europe-west1-b \
  --aliases=eth0:10.156.1.0/28

Markaas tilmaanta server waa inay qeexdo isla block-kaas. Cinwaankeeda koowaad wuxuu noqdaa gateway tunnel-ka, cinwaannada hadhayna waxaa la siiyaa macaamiisha. Halkan laba lambar waxay qeexaan hal block, shabakad iyo netmask, waana syntax pool-ka uu OpenVPN weli filayo.

server 10.156.1.0 255.255.255.240

Xaqiiji in cinwaanku dhab ahaan ku soo degay interface-ka oo aan ku ekaan oo kaliya configuration-ka OpenVPN. Fabric wuxuu gudbiyaa waxa NIC sheegto, ma aha waxa daemon-ku rumaysan yahay. Hal amarro ayaa go'aamisa:

ip -4 addr show dev eth0

Cinwaan labaad oo waligiis gaari waaya eth0, ama pool ku dul saaran subnet kale, wuxuu dambe u soo baxaa sida lumis goos goos ah ee ma aha khalad bilow ah. Daemon-ku wuu bilaabmaa, macaamiishu way xirmaan, oo kaliya qaar ka mid ah meelaha ayaa si khaldan u dhaqma. Hayso xadka alias oo yar si pool-ka loogu fududaado in lagu garto shaxda route-ka. Weligaa ha ka gooyin subnet uu instance kale hore u isticmaalo.

Sii trafficka soo noqda next hop

Jawaabta ka timid host ku yaal VPC waxaa loo diraa cinwaan macmiil oo ku yaal pool tunnel-ka, kaas oo aan ka tirsanayn subnet kasta oo VPC yaqaan. Iyada oo aan route loo hayn pool-kaas, jawaabtu waxay istaagtaa hop-ka koowaad ee aan wax la mid ah helin, codsigana waxaa laga yaabaa inuu ka guulaystay dhinaca kale.

gcloud compute routes create openvpn-return \
  --network=prod-vpc \
  --destination-range=192.168.127.0/24 \
  --next-hop-instance=openvpn-vm \
  --next-hop-instance-zone=europe-west1-b \
  --priority=800

Isla route-kaas waxaa loo baahan yahay prefix kasta oo ka dambeeya macmiil halkii uu ka ahaan lahaa VPC gudaheeda. Prefix-yadaas waxay sidoo kale u baahan yihiin entry iroute oo ku yaal faylka ccd ee macmiilkaas. Entry-daas waa xisaab dhinaca server-ka: waxay u sheegtaa server-ka macmiilkee leh prefix-ka, oo waxba kuma rakibto macmiilka laftiisa.

Hayso liiska push dhinaca macmiilka ee wada hadalka, sababtoo ah wuxuu kaliya ku darayaa routes mashiinka xirmaya. Line push loogu talagalay subnet VPC iyo route VPC ku soo noqda pool-ka waa laba qaybood oo isla waddo ah, qayb kastaa kaligeed waxay soo saartaa tunnel qaada codsiyada laakiin aan qaadin jawaabaha.

Firewalls, gudbin iyo hops-ka dhexdooda

Firewall-ka VPC wuxuu qiimeeyaa packet-ka la furay, sidaas darteed qaanuunka ingress waa inuu oggolaadaa pool tunnel-ka iyo prefix site kasta oo VM ku gaara jidkaas. Habka default-deny wuxuu halkan ku fashilmaa aamusnaan: packet-ka waa la tuuraa ka dib furitaanka, log-ka OpenVPN-na wuxuu muujinayaa session caafimaad qaba.

Host kasta oo Linux ah oo gudbiya halkii uu dhamayn lahaa, hubi in net.ipv4.ip_forward daaran yahay. Qaanuunka lahaanshaha ayaa halkaas sidoo kale khuseeya: mashiin u gudbiya subnet uusan lahayn wuxuu tuuraa packet-ka sida VM-ku yeeli lahaa. Akhri qiimaha ka hor intaadan tunnel-ka eedayn.

Marka si sax ah hal prefix fashilmo

Fashilka qayb ahaan waa kiiska ugu fudud in la akhriyo, sababtoo ah wax kasta oo kale oo jidka ku yaal hore ayaa loo caddeeyay. Ka bilow liiska route-ka oo akhri xadka meesha iyo next hop-ka entry-ga ay ahayd inuu daboolo prefix-ka, ka dibna akhri sharaxaadda instance-ka oo isbarbardhig xadkiisa alias iyo pool-ka uu server-ku qaybiyo.

gcloud compute routes list --filter=destination-range~10.164.0.0
 gcloud compute instances describe openvpn-vm --format=get(networkInterfaces[0].aliasIpRanges)

Route maqan wuxuu isu muujiyaa sida maqnaanshaha next hop ee prefix-ka, halka alias maqan uu isu muujiyo sida packet lagu tuuray interface-ka; dhinaca macmiilka labaduba way iskaga eg yihiin, labadaas output-na si buuxda way u kala duwan yihiin. Haddii labaduba jiraan, tuhmanaha hadhay waa iroute ccd ee macmiilka sheeganaya prefix-ka.

Qor afarta qiime ee tunnel-ka agtiisa: xadka alias, pool-ka server-ka, prefix-yada la push galiyay, routes-ka VPC. Alias duugoobay wuxuu jebiyaa cinwaan kasta oo pool-ka ah, route duugoobay wuxuu jebiyaa hal jiha, push maqan wuxuu macmiilka ka qariyaa prefix-ka, iroute khaldanna prefix-ka wuxuu u diraa peer khaldan. Qofka xiga ee subnet ku dari doona wuxuu u baahan yahay afartaas oo dhan hal meel, qoraalkaasna wuu ka jaban yahay habeennimada.

Maqaallo la xiriira