Пир на VPN пингва други интерфейси, защото те са локални
Локалната таблица за маршрутизация изпраща пакети до всеки адрес, който хостът притежава, независимо на кой интерфейс се намира. Настройките за препращане никога не влизат в този път.
WireGuard клиент се свързва и пингва адрес на напълно различен интерфейс, и отговорът пристига. Записите показват заявката само в тунела. Нищо не е счупено, а настройката за препращане, която внимателно е била изключена, няма нищо общо. Това е сравнение между два пътя, които изглеждат еднакво на диаграма и са напълно различни в ядрото.
Единият път препраща пакети от името на някой друг; другият ги доставя на самия хост.
Пакет, адресиран до хоста, остава в хоста
Отдалеченият клиент изпраща IP пакет до адрес, който хостът притежава. Маршрутизацията задава един въпрос за този пакет: този адрес локален ли е? Всеки адрес, който хостът държи, се появява в локалната таблица за маршрутизация, и тази таблица се преглежда преди основната, затова пакетът отива към собствения стек на хоста, вместо да излезе през друг интерфейс. Отговорът се генерира локално и се връща през тунела, защото заявката е дошла оттам.
Това е целият механизъм. Не се извършва препращане, не участва промяна на състоянието на интерфейса и въпросният адрес не трябва да е достъпен от другаде.
Защо ip_forward не се прилага
Препращането управлява пакети, които трябва да излязат през различен интерфейс от този, по който са пристигнали. Пинг до самия хост никога не поема този път: пакетът се консумира локално и отговорът се генерира локално. Затова настройката net.ipv4.ip_forward=0 не променя нищо тук и правило във веригата за препращане никога не вижда трафика. Правилният контрол е на пътя за вход, ограничен по входящ интерфейс или източник.
Ето защо изключването на препращането и допускането, че хостът е изолиран, създава фалшиво чувство за сигурност.
Прочетете локалната таблица, която е решила
ip rule show обикновено съобщава за правило с приоритет нула, което изпраща всички търсения първо към локалната таблица, а ip route show table local изброява собствените адреси на хоста с локален обхват. Тази таблица включва адреси на интерфейси, които са административно изключени, но все още конфигурирани. IPv4 адресите, зададени статично, обикновено оцеляват при прекъсване на връзката и точно така пинг до изключен мост може да успее и да изненада оператора.
IPv6 се разминава точно по този въпрос. Неговите адреси обикновено се отнемат, когато връзката прекъсне, освен ако не е зададено keep_addr_on_down. Сравнявайте семействата, вместо да предполагате, че едно правило покрива и двете.
Какво всъщност достига един пир
Отговор от собствения адрес на рутера в даден сегмент не казва нищо за машините зад този сегмент. Пирът не може да достигне хост зад другия интерфейс по този път; той достига само адреси, които самият рутер притежава. Тестването на услуга на отделен LAN хост, вместо пинг към адреса на рутера, е това, което установява дали препращането е разрешено изобщо.
Ограничаването на пир до услуги, вързани към адреса на тунела, е въпрос на политика за вход. Разрешете желаната услуга на интерфейса на тунела и ограничете източниците, които могат да я използват, защото пакетът наистина пристига там.
Проверете и адресите, които сте възнамерявали да изведете от употреба. Премахването на адрес от интерфейс е по-надеждно от подреждането на правила за защитна стена върху остарял адрес.