Host-only-адаптары ствараюць лакальную віртуальную сетку, а маршрутызаваныя TUN-тунэлі перадаюць IP-пакеты паміж адрасамі. Ні адзін з іх не з'яўляецца мостам да другога, таму працаздольная канфігурацыя павінна вызначыць, хто перасылае і каму належыць зваротны маршрут. Калі гэтыя два прызначэнні пераблытаць, госць адкажа тунэлю з крыніцы, якую кліент тунэля зусім не запытваў. Дызайн ніжэй трымае абодва прэфіксы асобна і робіць зваротны шлях яўным.

Дзве сеткі, два прэфіксы

Дайце пулу тунэля і host-only-сетцы розныя прэфіксы і ніколі не выкарыстоўвайце адзін замест другога. У гэтым прыкладзе пул VPN — 10.44.0.0/24, а host-only-сетка — 192.168.99.0/24, хост на 192.168.99.1 і госць на 192.168.99.20. Прызначэнне аднаго прэфікса і TUN-прыладзе, і host-only-адаптару не аб'ядноўвае іх. Яно стварае два прэтэндаванні на адзін дыяпазон адрасоў, і табліца маршрутызацыі адказвае за таго, каго яна выпадкова пакінула.

Host-only-адаптар існуе на хосце і ўнутры гасця, і ён сам па сабе не мае шляху з машыны. Масты і NAT-падключэнні маюць рознае ўздзеянне, і пераключэнне ў рэжым моста не з'яўляецца ўмовай для доступу да адной паслугі гасця.

Хост ужо трымае шлях

Паглядзіце, што ўжо ёсць, перш чым нешта дадаваць. Хост мае інтэрфейс у host-only-сетцы і маршрут для гэтага прэфікса; абодва створаны, калі адаптар падняўся.

ip -br addr show
ip route show 192.168.99.0/24
sysctl net.ipv4.ip_forward

Трэці радок — гэта механізм, які ператварае хост у прамежкавы вузел. Без яго пакет, які прыйшоў з тунэля, адрасаваны сетцы, да якой хост можа дабрацца, але не будзе перасылаць. Перасылка неабходная і недастатковая. Палітыка фільтрацыі ўсё яшчэ вырашае, ці дазволены пэўны паток паміж інтэрфейсам тунэля і host-only-інтэрфейсам, і гэта рашэнне павінна быць запісана, а не ў палітыцы па змаўчанні, якую ніхто не чытаў.

Праштурхніце маршрут, потым адфільтруйце тое, да чаго ён даходзіць

Сервер можа перадаць host-only-прэфікс кліентам, якія прымаюць праштурхнутыя маршруты; гэта той самы механізм, што і для любой іншай падсеткі за тунэлем.

push "route 192.168.99.0 255.255.255.0"
iptables -A FORWARD -i tun0 -o vboxnet0 -d 192.168.99.20 -p tcp --dport 5432 -j ACCEPT
iptables -A FORWARD -i vboxnet0 -o tun0 -s 192.168.99.20 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Гэтыя два правілы дазваляюць адну паслугу ў адным кірунку і яе адказы. Маршрут, які даходзіць да ўсяго прэфікса, і фільтр, які дазваляе адзін порт, — гэта свядомая камбінацыя; маршрут разам з безумоўным прыняццем — гэта спосаб, якім лабараторная паслуга робіцца адкрытай. Праштурхнуты маршрут таксама не з'яўляецца аўтарызацыяй. Кліент прымае яго, хост перасылае яго, а фаервол гасця і сама паслуга ўсё яшчэ маюць голас.

Госцю патрэбны шлях назад

Госць, да якога даходзяць з 10.44.0.x, павінен адпраўляць свае адказы на host-only-адрас хоста, або хост павінен трансляваць крыніцу. Атрыманне адраса ад DHCP VirtualBox нічога не кажа ні пра адну з гэтых схем.

ip route add 10.44.0.0/24 via 192.168.99.1 dev enp0s8
ip route get 10.44.0.15

Даданне гэтага маршруту ўнутры гасця захоўвае першапачатковую крыніцу, што захоўвае сэнс палітыкі і журналаў па кожным кліенце. Абмежаваная трансляцыя крыніцы на хосце — гэта альтэрнатыва, і яна працуе, але коштам хавання таго, які кліент падключыўся. Перакрыццё — іншы рэжым збою. Аддалены кліент, чыя хатняя сетка ўжо выкарыстоўвае 192.168.99.0/24, прачытае праштурхнуты маршрут як уласную сетку, і ніякае змяненне на баку сервера не выправіць гэтую неадназначнасць. Перанумаруйце адзін бок або выберыце прэфікс, які наўрад ці сутыкнецца.

Прылада TUN перадае IP-пакеты, таму даданне шлюза па змаўчанні ўнутры гасця не ператварае тунэль у сегмент Ethernet з host-only-адаптарам. Маставанне TAP — гэта іншы дызайн з уласнай падтрымкай кліентаў і валоданнем адрасамі, і змешванне двух апісанняў вядзе да канфігурацый, якія ніколі не збягаюцца.

Праверце, а затым зрабіце так, каб яно перажыло перазапуск

Праверце адну бясшкодную паслугу са звычайнага аддаленага кліента, паглядзіце зваротны маршрут гасця і пераканайцеся, што паслуга, якую вы не дазволілі, адхіляецца, а не павольная.

ss -lntp '( sport = :5432 )'
conntrack -L | grep 192.168.99.20

Затым перазапусціце службу VPN і сеткавыя сродкі віртуальнай машыны і паўтарыце тыя ж тры праверкі. Маршрут, дададзены ўручную, жыве да наступнай перазагрузкі, а канфігурацыя, якая працуе толькі ў цёплай сесіі, — не дызайн. Запішыце абодва прэфіксы, палітыку перасылкі і маршрут гасця разам. Той, хто дадасць наступную віртуальную машыну, спатрэбіцца ўсё гэта, і інакш ён будзе адкрываць іх нанова з кожным няўдалым злучэннем.

Падобныя артыкулы