Жергиликтүү Wi-Fi жана Ethernet кардарлары Piнин hotspotуна туташып, анын DHCP диапазонунан дарек алышат жана интернет барактарын нааразылыксыз жүктөшөт. Анан ошол эле кардарлар үйдөгү LANда файл бөлүшүүнү же веб-интерфейсти ачканда убакыт бүтөт, ал эми Pi өзү ошол LANга туннель аркылуу жетет. Зымсыз катмарда эч нерсе бузулган эмес. Жетишпегени — маршрутталган келишим: hotspot префикси TUN интерфейсине өткөрүлүшү керек жана үй тараптагы бир нерсе жоопторду ал жакка кантип кайтарууну билиши керек. Бир пакеттин барып-кайтуусун бүтүрүшү үчүн эки жарым тең болушу керек.

Үч түрдүү иши бар үч туташуу

Linux Ethernet көпүрөсү кадрларды максаттуу MAC дареги боюнча өткөрөт. OpenVPN TUN режиминде IP пакеттерин алып жүрөт жана MAC катмары такыр жок, ошондуктан жергиликтүү көпүрө кошуу туннелди порт катары эч качан каттабайт. ядронун TUN/TAP документтери ошол бөлүнүүнү түшүндүрөт: TAP түзмөгү Ethernet интерфейсине окшош, TUN түзмөгү андай эмес. Эки жергиликтүү портту көпүрөлөп, анан маршруттаган долбоор — интерфейс аттары эмне дебесин, маршрутизатор.

Бул айырмачылык ээликти чечет. Кардарлардын кошумча тармагы, алардын демейки шлюзу жана ошол диапазондун DHCP ыйгарым укугу Piнин жергиликтүү планына таандык. Үйдөгү DHCP жарыялоолору маршрутталган туннелден өтпөйт жана эч бир көпүрө жөндөөсү муну өзгөртпөйт; кардарларды үйдөгү DHCP серверине багыттоо — өзүнүн ката режимдери бар өзүнчө, атайын реле долбоору.

Модемди да кардар көпүрөсүнөн тышкары кармаңыз. PPP туташуусу башка белгидеги Ethernet түзмөгү эмес, жана pppdнин документтелген демейки маршрут логикасы IPCP сүйлөшүүлөрүнөн кийин иштейт жана ал байланыш үзүлгөндө өз маршрутун кайтарып алат. DHCP шаблонун көчүрүп, ар бир usb0ди ppp0 деп өзгөртүү шлюз, метрика же жашоо цикли жөнүндө эч нерсени далилдебейт.

Каалаган конфигурацияны оңдоодон мурун префикстерди тандаңыз

Кайчылашкан префикстер firewall эрежелеринен да көп кечти текке кетирет, анткени кайчылашуу туннель соо болсо да маршрут издөөнү туура эмес интерфейске жөнөтөт. Piде мурунтан эмне бар экенин тизмелөөдөн баштаңыз, анан натыйжаны төрт өзүнчө бассейн катары окуңуз.

ip -4 addr show scope global
ip -4 route show table main
ip -4 route get 192.168.77.10

Биринчи бассейн — оператор модемге берген underlay дареги; ал кардарларга караган ар кандай пландан тыш калышы керек. Экинчиси — сервер тандаган туннель кошумча тармагы, көбүнчө анын өзүнүн жеке /24ү. Үчүнчүсү — hotspot көпүрөсү, ал эми төртүнчүсү — жетүүнү каалаган үй префикси. Бул жүрүштө hotspot 172.28.90.0/24 алат, көпүрө 172.28.90.1дө, ал эми үйдөгү кызмат LANы 192.168.77.0/24 сактайт, бул керектөөчү маршрутизаторлору менен келген 192.168.1.0/24 жана 10.0.0.0/24 демейкилеринен жана оператордун 100.64.0.0/10 диапазонунан качат.

Hotspotтун DHCP диапазонунда шлюз катары көпүрө дарегин гана жарыялаңыз, башка эч нерсе эмес. Hotspot кардарларына эч качан шлюз катары үй дарегин бербеңиз; алардын ошол сегментке байланыш катмарында жолу жок.

Ар бир багытты ага ээлик кылган тарапта маршруттаңыз

Piге туннель аркылуу үй префиксине маршрут керек. Сервер режиминдеги серверлер адатта бул маршрутту түртүшөт, ошондуктан адегенде өткөрүүнүн күйгүзүлгөнүн жана ядронун tun0дөн үй дарегин чечээрин текшериңиз.

sysctl net.ipv4.ip_forward
ip route add 192.168.77.0/24 dev tun0
ip -4 route get 192.168.77.10

Эгер ip route get дагы эле underlay интерфейсин билдирсе, ошол жерде токтоңуз; жолдун андан ары эч нерсеси туура эмес издөөнү оңдой албайт.

Үй түзмөктөрүнүн 172.28.90.0/24га маршруту жок, ошондуктан алардын жооптору демейки шлюзди ээрчип, маршрутизатордо өлөт. Эки колдоого алынган оңдоо бар. Же үй маршрутизаторуна hotspot префиксин VPN серверинин LAN дарегине багыттаган статикалык маршрут кошуңуз, же сервер өзү шлюз болгондо кардар префиксин сервердин өз маршруттоо таблицасына каттаңыз. OpenVPNдин көп кардар режиминде кардарга тиешелүү каталог ошол байланышты алып жүрөт: кардар сертификатынын жалпы аты менен аталган файл, анын ичинде iroute 172.28.90.0 255.255.255.0 жана аны сервер ядросуна орноткон тиешелүү route сабы бар. Серверде болжолдонгон ядро маршруту серверге кайсы кардар префикске ээ экенин айтуу менен бирдей билдирүү эмес.

Бул иштеши үчүн үй тармагынын DHCP кызматын VPN серверине көчүрбөңүз. Бүт үй үчүн демейки шлюзди алмаштыруу бир жеке кайтаруу маршрутун кошуудан алда канча чоң өзгөрүү жана ал DNSти, дарек резервдерин жана жаңы ижараны этибарга албаган ар бир түзмөктү ийгиликсиздикке сүйрөйт.

Firewallды болжолдобой өткөрүүнү ачыңыз

Өткөрүүнүн күйгүзүлгөнү пакеттин өтүүгө уруксаты бар дегенди билдирбейт. Көпүрөдөн туннелге трафик дагы эле чыпкалоо эрежелерине урунат жана демейки drop өткөрүү саясаты hotspot трафигин таштайт, ал эми Piнин өз трафиги уланат, бул дал жогорудагы бөлүнгөн симптомду жаратат.

iptables -S FORWARD
iptables -t nat -S POSTROUTING
nft list ruleset

br0төн tun0кө чейинки уруксат эрежесин жана тиешелүү жооп багытын, ошондой эле булакты кайра жаза алган postrouting эрежесин издеңиз. Эгер чынжыр саясаты drop болуп, эч бир эреже дал келбесе, саясатты acceptке буруунун ордуна тар уруксаттарды кошуп, кайра сынаңыз.

Которуу — талап эмес, саясат тандоо. Үй LANына карай булактык NAT ар бир hotspot кардарды Piнин туннель дарегине окшоштурат, бул үй журналдарында кардар боюнча атрибуцияны жоготот жана баштапкы булакты күткөн кызматтарды бузат. NATсыз маршруттоо кардар даректерин көрүнүктүү кармайт, бирок жогорудагы кайтаруу маршрутуна көз каранды. Бирөөнү тандап, DNS жана IPv6га ушундай мамиле кылыңыз, анткени бузулган IPv6 жолунун жанындагы иштеген IPv4 жолу браузерде дагы эле жарым бузук деп окулат.

Барып-кайтууну текшериңиз, анан аны атайылап бузуңуз

Hotspot кардарынан сынаңыз, эч качан Piден эмес, анткени Piнин өз трафиги алга жана кайтаруу жолдорун тең айланып өтөт. Бир кардар үй кызматына жетүүгө аракет кылганда эки интерфейсти тең байкаңыз.

tcpdump -ni br0 host 192.168.77.10
tcpdump -ni tun0 host 192.168.77.10
ping -c 3 192.168.77.10

Эки жазууну чогуу окуңуз. br0дө пайда болуп, tun0дө эч качан көрүнбөгөн суроолор Pi өткөрбөй жатканын же маршрут башка жерди көрсөтүп жатканын билдирет. tun0дө жоопсуз суроолор үй тарапта кайтаруу маршруту жоктугун же сервер пакетти чыпкалаганын билдирет. tun0до пайда болуп, br0до кайра көрүнбөгөн жооптор карама-каршы чыпкалоо эрежеси жоктугун билдирет, мында туннель кемчиликсиз көрүнөт, ал эми кардар дагы эч нерсе көрбөйт.

Анан жолду атайылап бузуңуз. Модем байланышын түшүрүп, кайра көтөрүңүз жана маршрут менен жазуу текшерүүлөрүн кайра иштетиңиз; туннелден өтүп, бирок кайра туташууда жоголгон маршрут бир жолку буйрукка эмес, туташуу профилине таандык. Туннелдин транспорту дагы эле underlay аркылуу чыгып жатканын, өзү аркылуу эмес экенин тастыктаңыз, бул түртүлгөн демейки маршрут карымталашка хост маршруту жок кабыл алынгандагы классикалык цикл.

Долбоорду hotspot кардары үй атын чече алганда, TCP кызматын ача алганда жана бир модем кайра туташуусунун ичинде сессияны тирүү кармай алганда гана кабыл алыңыз. Эгер колдонмо чын эле үй сегментинде Ethernet деңгээлиндеги ачууну талап кылса, жергиликтүү көпүрөнү көпүрөлөнгөн деп сүрөттөп, жарыялоону күтүүнүн ордуна колдоого алынган Layer 2 долбоорун тандаңыз.

Тектеш макалалар