Як перавесці VPN-сервер Raspberry Pi на Ethernet
Перавядзіце VPN-сервер Raspberry Pi з Wi-Fi на Ethernet, не змяняючы імя канчатковага пункта, прывязку слухача, проброс порта і шлях адкату за адзін крок.
Перавесці Pi з Wi-Fi на кабель выглядае як пяціхвілінная праца, і яна застаецца такой толькі калі разглядаць пераезд як чатыры асобныя налады, а не адну. Імя канчатковага пункта, да якога падключаюцца кліенты, можа застацца цалкам такім самым, пакуль адрас пад ім змяняецца. Ламаецца насамрэч слухач, прывязаны да старога адраса, проброс порта, усё яшчэ накіраваны на бесправадную арэнду, або зваротны маршрут, які выходзіць праз інтэрфейс, які вы лічылі выведзеным з эксплуатацыі. Гэты дапаможнік трымае шлях аднаўлення адкрытым на кожным кроку, таму няўдалае пераключэнне каштуе толькі перазагрузкі.
Запішыце чатырох адказных, перш чым што-небудзь адключыць
Чатыры налады вырашаюць, ці перажыве пераключэнне: адрас Pi, адрас прывязкі OpenVPN, мэта перанакіравання на маршрутызатары і шлях, якім ідуць адказы. Запішыце ўсе чатыры, перш чым кранаць кабель, бо калі бесправадная арэнда знікне, старыя значэнні вы з машыны ўжо не прачытаеце. Правадны інтэрфейс не ўспадкоўвае бесправадны профіль, і ў Bookworm адрас жыве ў NetworkManager, тады як Bullseye трымае яго ў dhcpcd.conf. Рэзервацыя, прывязаная да бесправаднога MAC-адраса, нічога не кажа пра eth0. Стаўцеся да новага адраса як да новага прызначэння, якому патрэбны ўласны доказ.
Old wireless lease: 10.42.7.24/24 on wlan0
New wired address: 10.42.7.31/24 on eth0
Client endpoint: vpn.lab.example:1194/udp
Слухач — другі адказны. Калі служба запускалася з канкрэтным адрасам прывязкі, сокет памірае разам са старым інтэрфейсам; калі ён слухае ўсе адрасы, сокет выжывае, і правіла маршрутызатара становіцца адзіным, што засталося выправіць.
Мэта перанакіравання і зваротны шлях — тыя адказныя, якіх людзі прапускаюць. Проброс, што ўсё яшчэ паказвае на 10.42.7.24, дасылае ўваходныя рукапацісканні на адрас, якога ў Pi больш няма, таму кліенты ідуць у тайм-аўт без аніводнага радка лога на серверы. Зваротны шлях важны, калі абодва каналы ненадоўга актыўныя, бо Pi адказвае праз той інтэрфейс, якому аддае перавагу табліца маршрутызацыі, а гэта не заўсёды той, на які прыйшоў пакет. Пошук маршруту ніжэй паказвае, якую крыніцу выбірае ядро.
Прачытайце рэальны сокет, перш чым давяраць новаму адрасу
Файлы канфігурацыі апісваюць намер, а сокет апісвае рэальнасць. Спытайце працуючую службу, да чаго яна прывязаная, замест таго каб верыць канфігурацыі, якую памятаеце. Дапаможнік OpenVPN 2.6 вызначае --local як прывязку да аднаго адраса і заўважае, што яго адсутнасць прывязвае кожны інтэрфейс.
sudo systemctl cat openvpn-server@server | grep -n -- '--local'
sudo ss -lunp '( sport = :1194 )'
Чытайце слупок лакальнага адраса, а не слупок стану. Радок, што паказвае 10.42.7.24:1194 азначае, што сокет прывязаны да адраса, які вы вось-вось выдаліце, тады як 0.0.0.0:1194 або *:1194 азначае, што дэман сам пойдзе за зменай інтэрфейса. Калі адрас прывязаны, адрэдагуйце профіль і перазапусціце юніт замест ручнога перапісвання жывога сокета, а потым пераканайцеся, што служба па-ранейшаму дасягае свае файлы сертыфіката і ключа.
Прайдзіце пераезд у парадку, які пакідае вас на сувязі
Парадак тут важнейшы за хуткасць. Падніміце правадны канал, пакуль бесправадны яшчэ працуе, пацвердзіце новы адрас і зваротны шлях, і толькі потым вывядзіце бесправадны профіль з эксплуатацыі. Гэтая паслядоўнасць трымае працоўную сесію адкрытай, пакуль замену не даказана.
ip -br addr show eth0
ip route get 203.0.113.10
nmcli -g ipv4.method,ipv4.addresses con show "Wired connection 1"
Першая каманда адказвае, ці атрымаў eth0 адрас, які вы задумалі, а другая друкуе адрас крыніцы, які ядро выкарыстала б для знешняга прызначэння, таму запускайце яе да і пасля змены. Калі гэтая крыніца ўсё яшчэ бесправадны адрас, правадны канал пакуль не прыярытэтны, і праверка звонку праваліцца з прычыны, што не мае дачынення да OpenVPN. Выпраўце перавагу маршрутызацыі, перш чым кранаць проброс.
Калі абодва каналы актыўныя, Pi можа аддаваць перавагу бесправаднаму маршруту па змаўчанні, бо яго наладзілі першым або бо правадны канал мае вышэйшую метрыку. У Bookworm падтрымліваемая налада — ipv4.route-metric на злучэнні, а ў Bullseye эквівалент — інтэрфейсны радок metric у файле dhcpcd.conf. Знізьце прыярытэт бесправаднага канала, а не выключайце яго, каб шлях адкату заставаўся на адлегласці адной каманды.
Давядзіце тунель звонку, а не з LAN
VPN-злучэнне, што працуе з канапы, даказвае менш, чым здаецца. Трафік знутры LAN да публічнага адраса праходзіць праз правілы hairpin або адбіцця, якія маршрутызатары рэалізуюць непаслядоўна, таму паспяховы тэст з LAN можа суіснаваць са зламаным знешнім шляхам. Для прыёмачнага тэсту выкарыстоўвайце тэлефон з мабільнымі данымі або любы хост па-за сеткай. Спробы з LAN трымайце як асобную неабавязковую дыягностыку.
Потым чытайце лог у тым парадку, у якім прыходзяць пакеты. Зусім нічога азначае, што рукапацісканне ніколі не дайшло да Pi, значыць, няправільная мэта перанакіравання або брандмаўэр хоста. Рукапацісканне, што пачынаецца і захрасае, указвае на ключы, сертыфікаты або MTU. Сесія, што завяршаецца і абрываецца, звычайна азначае зваротны шлях або другі маршрут па змаўчанні, а радок лога кліента Initialization Sequence Completed кажа вам, што сам тунель падняўся.
sudo journalctl -u openvpn-server@server -n 40 --no-pager
sudo tcpdump -ni any udp port 1194 -c 20
Калі ў логу сервера нічога не з’яўляецца, пакуль кліент паўтарае спробу, спыніце чытаць канфігурацыю OpenVPN і вярніцеся да мэты перанакіравання. Захоп адказвае на пытанне пра прыбыццё за секунды, а ўваходныя пакеты без адказу звужваюць праблему да маршруту.
Захавайце адкат у адзін крок і вывядзіце бесправадны профіль з эксплуатацыі
Пакіньце бесправадны профіль усталяваным, пакуль правадная схема не перажыве перазагрузку. nmcli con show пералічвае імёны профіляў, якія вам спатрэбяцца, а выдалены профіль давядзецца аднаўляць з памяці ў найгоршы момант. Запішыце імя інтэрфейса, метад адрасацыі і метрыку побач з іншымі чатырма значэннямі. Адкат, які можна набраць з нататкі, каштоўнейшы за той, які даводзіцца рэканструяваць.
Вывядзенне бесправаднай залежнасці з эксплуатацыі — гэта змена ўласцівасці, а не выдаленне. Усталяванне connection.autoconnect no захоўвае ўліковыя даныя і гісторыю адрасоў недатыкальнымі, адначасова не даючы Pi зноў падключыцца да сеткі, ад якой вы пайшлі.
nmcli con show
sudo nmcli con up "Wired connection 1"
sudo nmcli con mod "previously-used-wifi" connection.autoconnect no
Перш чым абвясціць працу завершанай, пацвердзіце чатыры рэчы: мэта перанакіравання супадае з правадным адрасам, слухач перажыў перазапуск, знешні кліент завяршае рукапацісканне, і Pi ўсё яшчэ адказвае на правадным адрасе пасля перазагрузкі. Перазагрузка — найтаннейшы спосаб злавіць прызначэнне, што існавала толькі ў працуючым ядры. Калі штосьці з чатырох не спрацуе, падніміце бесправадны профіль назад з дапамогай sudo nmcli con up і параўнайце запісаныя значэнні з бягучымі.