VirtualBox VPN лабораторија: пролазна VM наспрам мреже само за хоста
Изаберите између рутиране пролазне VM и сегмента само за хоста за VirtualBox VPN лабораторију, па натерајте госта да се затвори при квару када тунел падне.
Морате одлучити колико машинерије заслужује ваша VPN лабораторија. Рутирана пролазна VM између два VirtualBox сегмента репродукује превод адреса, повратни пут и положај заштитног зида иза којег седи стварни клијент. Један сегмент само за хоста даје вам једна контролисана врата и ништа више. Верзија са пролазом кошта три госта и табелу рутирања коју одржавате; верзија само за хоста кошта једног госта и једну политику. Три питања их раздвајају, а треће одлучује може ли ваш тест уопште проћи.
Одговорите на три питања пре него што било шта клонирате
Почните од онога што 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 клијент и његов заштитни зид не могу случајно доћи до гостију. Интерни сегмент такође нема DHCP сервер осим ако га додате, па су статичне адресе најкраћи пут.
Дајте клијенту само његову WAN адресу, с подразумеваним пролазом који показује на WAN адресу пролаза. Сервер добија LAN адресу и користи LAN адресу пролаза као свој подразумевани пролаз. Гост који држи две адресе на једном сегменту или има залуталу руту ка другом сегменту има пут око рутера, и тестови испод ће вам лагати.
Држим текстуалну датотеку поред имена VM-ова са четири адресе и два имена сегмената и лепим је у сваку љуску. Недељама касније, кад промена профила нешто поквари, та датотека је разлика између отклањања грешака у профилу и отклањања грешака у властитом памћењу.
Изаберите интерну или само за хоста за сегмент који не сме да процури
Режим само за хоста ствара виртуелни адаптер на самом хосту, обично vboxnet0, и даје хосту адресу на сегменту госта. То је згодно за администрацију и кобно за тест изолације, јер хост сада може директно да дође до госта и свака услуга на страни хоста постаје могућ пут. Интерни режим уопште нема адаптер хоста. Два режима се лако побркају у табли мрежних подешавања, зато проверите документовану разлику, а не ознаку (погледајте страницу детаљи умрежавања у VirtualBox-у).
За госта који мора да користи тунел, интерни је сигурнији подразумевани избор, с пролазом као јединим излазом. Ако задржите само за хоста, третирајте адаптер хоста као пут управљања и реците то наглас: хост сме да дође до госта, а гост не сме да може да користи хост као излаз.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Изолација коју можете да докажете јесте изолација коју сте конфигурисали. Гост с једним интерним адаптером, подразумеваном рутом на пролазу и без NAT адаптера нема пут који заобилази пролаз. Гост с адаптером само за хоста и NAT адаптером има два пута, и само је један од њих онај који сте хтели да тестирате.
Рутирајте и преводите на пролазу, па га натерајте да се затвори при квару
VirtualBox не прослеђује између сегмената; то чини гост. С VM-ом VPN сервера иза пролаза, укључите прослеђивање и преводите саобраћај клијента док излази према серверу:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
С тим правилом сервер види LAN адресу пролаза уместо клијентове, и тако стварни клијент иза NAT-а оператера изгледа главном чвору. Сачувајте sysctl вредност у /etc/sysctl.d/, а правило у оној услузи заштитног зида коју дистрибуција користи, иначе поновно покретање тихо враћа лабораторију у рутирано, али непереведено стање.
Прослеђивање није ауторизација. Под подразумеваном политиком FORWARD с вредношћу ACCEPT, гост чија подразумевана рута показује на пролаз излази кроз интерфејс који одабере табела рутирања, с тунелом или без. Ако пролаз има и 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
Затим докажите излаз. Питајте с госта услугу одраза адреса који извор види и упоредите то с властитом излазном адресом пролаза; ако се одговор подудара с адресом хоста, постоји пут око тунела. Проверите који резолвер гост заиста користи и проверите IPv6 засебно, јер сегмент у којем је IPv6 укључен док тунел носи само IPv4 цури по дизајну, а не случајно.
На крају, покварите то намерно. Зауставите тунел или блокирајте његов спољни порт и отворите нову везу с госта. Мора да падне, а разлог мора бити онај који можете да именујете: нема руте, постоји правило одбијања или је резолвер мртав. Поново покрените тунел и потврдите да се гост опоравља без поновне изградње мреже. Ако mesh VPN као Hamachi или ZeroTier дели лабораторију, запамтите да мостни адаптер прати име адаптера, а не mesh, па мост мора поново да се усмери након што клијент инсталира властити виртуелни адаптер.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Дељење гостовог тунела с хостом пресликава проблем. Усмеравање хостове подразумеване руте на госта функционише, као и прокси унутар госта; NAT кроз хост не носи гостов тунел за саобраћај који је хост започео. Сачувајте имена сегмената и правила заштитног зида на једном месту, направите снимак радног стања и забележите изворну адресу коју је сервер посматрао. Следећа промена профила тада кошта једно покретање скрипте уместо поново изграђене лабораторије.