VirtualBox VPN зертханасы: шлюз VM немесе тек хост желісі
VirtualBox VPN зертханасы үшін маршрутталған шлюз VM мен тек хост сегментінің арасында таңдаңыз, содан кейін туннель құлағанда қонақты жабық түрде сәтсіз етіңіз.
Сіздің VPN зертханаңыз қанша механизмге лайық екенін шешуіңіз керек. Екі VirtualBox сегментінің арасындағы маршрутталған шлюз VM мекенжай аудармасын, қайтару жолын және нақты клиенттің артында отыратын firewall орнын қайта жаңғыртады. Бір ғана тек хост сегменті сізге бір бақыланатын есік береді, одан басқа ештеңе жоқ. Шлюз нұсқасы үш қонақ пен сіз ұстап отырған маршруттау кестесін талап етеді; тек хост нұсқасы бір қонақ пен бір саясатты талап етеді. Оларды үш сұрақ ажыратады, ал үшіншісі сіздің тестіңіздің мүлдем өте алатынын шешеді.
Бірдеңені клондамас бұрын үш сұраққа жауап беріңіз
VPN сервері нені бақылауы керектігінен бастаңыз. Егер сервер тест қонағының емес бастапқы мекенжайын көруі керек болса, олардың арасында бірдеңе аударуы керек, және сол бірдеңе сіз бақылайтын маршрутизатор болуы тиіс. Тек хост желісі хостқа қонақ сегментінде адаптер береді, аудармашы емес. Содан кейін қонақ сыртқа шығуы керек болғанда, сіз NAT адаптерін қосасыз, ал VirtualBox-тың өз NAT қозғалтқышы сізден сұрамай-ақ бастапқы мекенжайды қайта жазады.
Содан кейін қонақтың туннельден басқа бірдеңеге шыға алатынын сұраңыз. Бұл жауап ішкі немесе тек хост нұсқасын таңдайды, және бұл зертхана жазбаларының көбісі өткізіп жіберетін сұрақ. Соңында туннель құлағанда не болуы керектігін сұраңыз, өйткені бұл топологияны емес, саясатты шешеді, ал тек бақытты жолды дәлелдейтін зертхана ештеңе дерлік сынаған жоқ.
| What the test requires | Routed gateway VM | Host-only guest |
|---|---|---|
| Server sees a translated source address | Yes, from your own MASQUERADE rule | No, VirtualBox NAT does it instead |
| The guest has exactly one egress | Yes, while the second adapter faces the tunnel | Only until a NAT adapter is attached |
| Policy is testable during a tunnel failure | Rules live in one place | Rules live on each guest |
Үш рөлді ішкі желілермен қосыңыз
Үш қонақ пен екі аталған сегментті пайдаланыңыз, шлюз екеуінде де адаптері бар жалғыз машина болсын:
VBoxManage modifyvm lab-client --nic1 intnet --intnet1 WAN
VBoxManage modifyvm lab-server --nic1 intnet --intnet1 LAN
VBoxManage modifyvm lab-gw --nic1 intnet --intnet1 WAN --nic2 intnet --intnet2 LAN
Ішкі желі үшін бөлек құру қадамы жоқ. --intnet1 ішіндегі жол — сегменттің өзі: екі машина оны тек атауы дәл сәйкес келгенде бөліседі, ал хосттағы ештеңе оған қосылмаған. Дәл осы соңғы қасиет зертхананың таза қайталану себебі, өйткені хосттың маршруттары, оның өз VPN клиенті және оның firewall-ы қонақтарға кездейсоқ жете алмайды. Ішкі сегментте DHCP сервері де жоқ, егер сіз қоспасаңыз, сондықтан статикалық мекенжайлар ең қысқа жол.
Клиентке тек оның WAN мекенжайын беріңіз, әдепкі шлюз шлюздің WAN мекенжайына сілтесін. Сервер LAN мекенжайын алады және шлюздің LAN мекенжайын өзінің әдепкі шлюзі ретінде пайдаланады. Бір сегментте екі мекенжай ұстайтын немесе басқа сегментке адасқан маршруты бар қонақ маршрутизаторды айналып өтетін жолға ие, ал төмендегі тесттер сізге өтірік айтады.
Мен VM атауларының қасында төрт мекенжай мен екі сегмент атауы бар мәтіндік файл ұстаймын және оны әр shell-ге қоямын. Апталар өткен соң, профиль өзгерісі бірдеңені бұзғанда, сол файл профильді жөндеу мен өз жадымды жөндеу арасындағы айырмашылық болады.
Ағып кетпеуі тиіс сегмент үшін ішкі немесе тек хост таңдаңыз
Тек хост режимі хосттың өзінде виртуалды адаптер жасайды, әдетте vboxnet0, және хостқа қонақ сегментінде мекенжай береді. Бұл әкімшілік үшін қолайлы және оқшаулау тесті үшін өлімге әкеледі, өйткені хост енді қонаққа тікелей жете алады, ал хост жағындағы әрбір қызмет ықтимал жолға айналады. Ішкі режимде хост адаптері мүлдем жоқ. Екі режимді желі параметрлері тақтасында шатастыру оңай, сондықтан белгіні емес, құжатталған айырмашылықты тексеріңіз (VirtualBox желілік егжей-тегжейлері бетін қараңыз).
Туннельді міндетті түрде пайдалануы керек қонақ үшін ішкі режим қауіпсіз әдепкі болып табылады, шлюз — жалғыз шығу жолы. Егер тек хост режимін ұстасаңыз, хост адаптерін басқару жолы ретінде қарастырыңыз және мұны дауыстап айтыңыз: хост қонаққа жете алады, ал қонақ хостты шығу ретінде пайдалана алмауы керек.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Сіз дәлелдей алатын оқшаулау — сіз конфигурациялаған оқшаулау. Бір ішкі адаптері, шлюзде әдепкі маршруты бар және NAT адаптері жоқ қонақтың шлюзді айналып өтетін жолы жоқ. Тек хост адаптері мен NAT адаптері бар қонақтың екі жолы бар, және олардың тек біреуі ғана сіз сынамақ болған жол.
Шлюзде маршруттаңыз және аударыңыз, содан кейін оны жабық түрде сәтсіз етіңіз
VirtualBox сегменттер арасында жібермейді; мұны қонақ жасайды. VPN серверінің VM шлюздің артында болғанда, жіберуді қосыңыз және клиенттің трафигін серверге қарай шыққанда аударыңыз:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Осы ережемен сервер клиенттің орнына шлюздің LAN мекенжайын көреді, және оператор NAT-ының артындағы нақты клиент желі басына дәл осылай көрінеді. sysctl мәнін /etc/sysctl.d/ ішінде, ал ережені дистрибутив пайдаланатын firewall қызметінде сақтаңыз, әйтпесе қайта жүктеу зертхананы үнсіз маршрутталған, бірақ аударылмаған күйге қайтарады.
Жіберу — авторизация емес. ACCEPT әдепкі FORWARD саясаты бойынша әдепкі маршруты шлюзге сілтейтін қонақ маршруттау кестесі таңдаған интерфейстен шығады, туннель болсын немесе болмасын. Егер шлюзде пакеттерді орнатуға арналған NAT адаптері де болса, ол адаптер туннель құлаған сәтте жұмыс істейтін шифрланбаған шығу жолы, ал сіздің тек-VPN тестіңіз ешқашан тек-VPN тесті болмаған.
Сервер алыста болып, туннельді шлюздің өзі аяқтағанда, сол шешім интернетке жететін NIC-ке емес, туннель интерфейсіне сілтейді:
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Туннельдің өз сыртқы тасымалын және жолақтан тыс басқару маршрутын жіберілетін трафиктен бөлек ұстаңыз. Егер шлюзді жөндеудің жалғыз жолы сіз жөндеп жатқан туннель болса, зертхана құлыпталу жаттығуына айналады. Сериялық консоль, тек хост басқару адаптері немесе белгілі жақсы күйдің суреті бұзылған маршрутизаторды қолмен қалпына келтіруден арзан.
Жолды хосттан емес, қонақтан тексеріңіз
Сыртқа қарай жұмыс істеңіз. Клиент шлюздің WAN мекенжайына жете алатынын, содан кейін шлюз арқылы серверге жете алатынын, содан кейін VPN портына қосылым шығып, қайтатынын растаңыз. Шлюздің екі интерфейсінде де түсіру жауаптың келетінін және қайтару жолында тасталатынын көрсетеді, мұны тек клиентте түсіру ажырата алмайды:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Содан кейін шығуды дәлелдеңіз. Қонақтан мекенжайларды шағылыстыру қызметінен қандай бастапқы мекенжайды көретінін сұрап, оны шлюздің өз шығу мекенжайымен салыстырыңыз; егер жауап хосттың мекенжайына сәйкес келсе, туннельді айналып өтетін жол бар. Қонақ іс жүзінде қандай resolver пайдаланатынын тексеріңіз және IPv6-ны бөлек тексеріңіз, өйткені IPv6 қосылған, ал туннель тек IPv4 таситын сегмент кездейсоқ емес, дизайн бойынша ағады.
Соңында оны әдейі бұзыңыз. Туннельді тоқтатыңыз немесе оның сыртқы портын бұғаттаңыз және қонақтан жаңа қосылым ашыңыз. Ол сәтсіз болуы керек, ал себебі сіз атай алатын болуы тиіс: маршрут жоқ, бас тарту ережесі бар немесе resolver өлі. Туннельді қайта іске қосыңыз және қонақ желіні қайта құрмай-ақ қалпына келетінін растаңыз. Егер Hamachi немесе ZeroTier сияқты mesh VPN зертхананы бөліссе, көпірленген адаптер mesh-ке емес, адаптер атауына бағынатынын есте сақтаңыз, сондықтан клиент өзінің виртуалды адаптерін орнатқаннан кейін көпірді қайта бағыттау керек.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Қонақтың туннелін хостпен бөлісу мәселені көрсетеді. Хосттың әдепкі маршрутын қонаққа бағыттау жұмыс істейді, қонақтың ішіндегі proxy де жұмыс істейді; хост арқылы NAT хост бастаған трафик үшін қонақтың туннелін тасымалдамайды. Сегмент атаулары мен firewall ережелерін бір жерде сақтаңыз, жұмыс істеп тұрған күйдің суретін түсіріңіз және сервер бақылаған бастапқы мекенжайды жазып алыңыз. Сонда келесі профиль өзгерісі қайта салынған зертхананың орнына бір скрипт іске қосуға тұрарлық.