WireGuard клиент се свързва и пингва адрес на напълно различен интерфейс, и отговорът пристига. Записите показват заявката само в тунела. Нищо не е счупено, а настройката за препращане, която внимателно е била изключена, няма нищо общо. Това е сравнение между два пътя, които изглеждат еднакво на диаграма и са напълно различни в ядрото.

Единият път препраща пакети от името на някой друг; другият ги доставя на самия хост.

Пакет, адресиран до хоста, остава в хоста

Отдалеченият клиент изпраща IP пакет до адрес, който хостът притежава. Маршрутизацията задава един въпрос за този пакет: този адрес локален ли е? Всеки адрес, който хостът държи, се появява в локалната таблица за маршрутизация, и тази таблица се преглежда преди основната, затова пакетът отива към собствения стек на хоста, вместо да излезе през друг интерфейс. Отговорът се генерира локално и се връща през тунела, защото заявката е дошла оттам.

Това е целият механизъм. Не се извършва препращане, не участва промяна на състоянието на интерфейса и въпросният адрес не трябва да е достъпен от другаде.

Защо ip_forward не се прилага

Препращането управлява пакети, които трябва да излязат през различен интерфейс от този, по който са пристигнали. Пинг до самия хост никога не поема този път: пакетът се консумира локално и отговорът се генерира локално. Затова настройката net.ipv4.ip_forward=0 не променя нищо тук и правило във веригата за препращане никога не вижда трафика. Правилният контрол е на пътя за вход, ограничен по входящ интерфейс или източник.

Ето защо изключването на препращането и допускането, че хостът е изолиран, създава фалшиво чувство за сигурност.

Прочетете локалната таблица, която е решила

ip rule show обикновено съобщава за правило с приоритет нула, което изпраща всички търсения първо към локалната таблица, а ip route show table local изброява собствените адреси на хоста с локален обхват. Тази таблица включва адреси на интерфейси, които са административно изключени, но все още конфигурирани. IPv4 адресите, зададени статично, обикновено оцеляват при прекъсване на връзката и точно така пинг до изключен мост може да успее и да изненада оператора.

IPv6 се разминава точно по този въпрос. Неговите адреси обикновено се отнемат, когато връзката прекъсне, освен ако не е зададено keep_addr_on_down. Сравнявайте семействата, вместо да предполагате, че едно правило покрива и двете.

Какво всъщност достига един пир

Отговор от собствения адрес на рутера в даден сегмент не казва нищо за машините зад този сегмент. Пирът не може да достигне хост зад другия интерфейс по този път; той достига само адреси, които самият рутер притежава. Тестването на услуга на отделен LAN хост, вместо пинг към адреса на рутера, е това, което установява дали препращането е разрешено изобщо.

Ограничаването на пир до услуги, вързани към адреса на тунела, е въпрос на политика за вход. Разрешете желаната услуга на интерфейса на тунела и ограничете източниците, които могат да я използват, защото пакетът наистина пристига там.

Проверете и адресите, които сте възнамерявали да изведете от употреба. Премахването на адрес от интерфейс е по-надеждно от подреждането на правила за защитна стена върху остарял адрес.

Подобни статии