VirtualBox VPN лабораторија: портал VM наспроти мрежа само за домаќинот
Изберете меѓу рутирана портална VM и сегмент само за домаќинот за VirtualBox VPN лабораторија, потоа направете гостинот да пропадне затворено кога тунелот ќе падне.
Треба да одлучите колку механизам заслужува вашата VPN лабораторија. Рутирана портална VM меѓу два VirtualBox сегменти ја репродуцира транслацијата на адреси, повратната патека и позицијата на firewall-от зад кој седи вистински клиент. Еден единствен сегмент само за домаќинот ви дава една контролирана врата и ништо друго. Верзијата со портал чини три гости и табела за рутирање што ја одржувате; верзијата само за домаќинот чини еден гостин и една политика. Три прашања ги делат, а третото одлучува дали вашиот тест воопшто може да помине.
Одговорете на три прашања пред да клонирате нешто
Започнете со тоа што VPN серверот мора да го набљудува. Ако серверот мора да види изворна адреса што не е на тестниот гостин, нешто мора да преведува меѓу нив, и тоа нешто мора да биде рутер што вие го контролирате. Мрежата само за домаќинот му дава на домаќинот адаптер во сегментот на гостинот, а не преведувач. Кога гостинот потоа треба да стигне до нешто надвор, приклучувате NAT адаптер, и сопствениот NAT мотор на VirtualBox ја препишува изворната адреса без да ве праша.
Потоа прашајте дали гостинот смее да стигне до нешто освен преку тунелот. Тој одговор избира внатрешна или само за домаќинот, и токму ова прашање повеќето описи на лаборатории го прескокнуваат. На крајот прашајте што мора да се случи кога тунелот ќе падне, зашто тоа одредува политика, а не топологија, а лабораторија што докажува само среќна патека не тестирала речиси ништо.
| 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 со четирите адреси и двете имиња на сегменти, и ја вметнувам во секоја школка. Со недели подоцна, кога промена на профилот ќе скрши нешто, таа датотека е разликата меѓу отстранување грешки во профилот и отстранување грешки во сопствената меморија.
Изберете внатрешна или само за домаќинот за сегментот што не смее да протече
Режимот само за домаќинот создава виртуелен адаптер на самиот домаќин, обично 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/, а правилото во онаа firewall услуга што ја користи дистрибуцијата, инаку рестарт тивко ја враќа лабораторијата во рутирана, но непреведена состојба.
Препраќањето не е авторизација. Под стандардната политика 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
Потоа докажете го излезот. Прашајте од гостинот услуга за одразување адреси кој извор го гледа и споредете го со сопствената излезна адреса на порталот; ако одговорот се совпаѓа со адресата на домаќинот, постои патека околу тунелот. Проверете кој resolver гостинот навистина го користи, и проверете IPv6 одделно, зашто сегмент во кој IPv6 е вклучен додека тунелот носи само IPv4 протекува по дизајн, а не случајно.
На крајот, скршете го намерно. Запрете го тунелот, или блокирајте го неговиот надворешен порт, и отворете нова врска од гостинот. Мора да пропадне, а причината мора да биде онаа што можете да ја именувате: нема рута, има правило за одбивање или resolver-от е мртов. Рестартирајте го тунелот и потврдете дека гостинот се опоравува без повторно градење на мрежата. Ако mesh VPN како Hamachi или ZeroTier ја дели лабораторијата, запомнете дека мостовиот адаптер го следи името на адаптерот, а не mesh-от, затоа мостот мора повторно да се насочи откако клиентот ќе инсталира сопствен виртуелен адаптер.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Споделувањето на тунелот на гостинот со домаќинот ја отсликува проблема. Насочувањето на стандардната рута на домаќинот кон гостинот функционира, како и прокси внатре во гостинот; NAT преку домаќинот не го носи тунелот на гостинот за сообраќај што домаќинот го започнал. Зачувајте ги имињата на сегментите и правилата на firewall-от на едно место, направете слика од работната состојба и запишете ја изворната адреса што серверот ја набљудувал. Тогаш следната промена на профилот чини едно извршување на скрипта наместо повторно изградена лабораторија.