Како функционира IPsec заснован на рути со XFRM интерфејс
XFRM интерфејсот му дава на IPsec заснован на рути уред низ кој се рутира. if_id, безбедносните асоцијации зад него и надворешната рута мора сите да се совпаднат.
IPsec заснован на рути ѝ препушта на табелата за рутирање одлука што порано ја носеа селекторите на политика. На Linux делот што тоа го овозможува е XFRM интерфејсот: виртуелен уред чиј сообраќај се совпаѓа со IPsec состојба преку идентификатор на интерфејс, а не преку селектор. Создавањето на еден бара една команда и не докажува ништо за тоа дали постои тунел. Уредот е кука меѓу рутирањето и безбедносната политика, и двете страни на таа кука мора да бидат конфигурирани пред нешто да биде заштитено.
Што е уредот и што не е
XFRM интерфејсот е рачка за рутирање. Пакетите рутирани во него се совпаѓаат со XFRM политики што упатуваат на истиот идентификатор на интерфејс, и ако постојат политика и состојба, тие се инкапсулираат. Без нив интерфејсот постои, бројачите стојат, а сообраќајот оди некаде каде што нема полза.
Ова е првото дијагностичко разделување. Рутата во уредот е факт за рутирањето, инсталираната состојба е факт за безбедноста, а бројачот што расте на уредот не е ниту едното ниту другото. Кога луѓето велат дека тунелот е кренат затоа што интерфејсот покажува UP, тие ги опишуваат знаменцата на врската на виртуелен уред што нема сопствен пар. Знаменцето значи дека уредот е создаден и овозможен, ништо повеќе.
Уште една граница: идентификаторот на интерфејсот не е име. Два уреда со слични имиња и различни идентификатори не делат состојба, а врска конфигурирана со погрешен идентификатор инсталира состојба што ниту една рута никогаш нема да ја користи.
Изградете еден по правилен редослед
Започнете со надворешниот уред и број што ќе го ставите и во конфигурацијата на демонот. Примерот го користи eth0 како надворешен интерфејс и 42 како идентификатор, адреси што треба да ги замените со свои.
Кренете го уредот, потоа потврдете го идентификаторот што јадрото го запиша пред да ја допрете VPN конфигурацијата:
sudo ip link add xfrm0 type xfrm dev eth0 if_id 42
sudo ip link set xfrm0 up
ip -d link show xfrm0 | grep -o 'if_id [0-9]*'Сега конфигурирајте ја врската во strongSwan со истиот идентификатор, бидејќи демонот мора да инсталира политики и состојби што упатуваат на него. Поставете ги локалниот и оддалечениот селектор на сообраќај на опсегот што имате намера да го рутирате, потоа рутирајте го тој опсег во уредот. Конфигурацијата на демонот и табелата за рутирање мора да се согласат и за идентификаторот и за одредиштата, и ниту една не ја доставува другата.
Држете ги IKE и ESP надвор од рутата на тунелот
Стандардната рута насочена во XFRM уредот ги фаќа инкапсулираните пакети и сообраќајот што тие го носат. Резултатот е јамка: портата се обидува да го испрати својот ESP низ тунелот што ESP треба да го изгради.
Решение е поконкретна рута за надворешната адреса на партнерот низ физичкиот интерфејс, која победува над стандардната затоа што совпаѓа повеќе битови. Рутирањето засновано на ознаки ја врши истата работа кога неколку тунели делат една табела, а strongSwan ги документира и двата пристапи за распоредувања засновани на рути.
Што и да изберете, проверете дека надворешниот пакет излегува без инкапсулација. Брза проверка е да пингувате надворешната адреса на партнерот откако тунелот е кренат; ако тоа не успее додека интерфејсот е кренат, сомневајте се во пресретнување, а не во достапност. Истата логика важи и за IKE портата, бидејќи сопствениот UDP сообраќај на демонот не смее да се рутира во уредот што тој се обидува да го воспостави.
Проверете ги бројачите на две места пред да го обвините шифрирањето
Бројачите на интерфејсот и бројачите на состојбата мерат различни фази. Пакетите рутирани во уредот го зголемуваат бројачот на уредот дури и кога ниту една состојба не се совпаѓа, додека бројачите на состојбата се движат само за сообраќај што навистина бил инкапсулиран.
Прочитајте ги двете, потоа прочитајте го погледот на демонот на детската асоцијација:
ip -s link show xfrm0
sudo ip xfrm state list | grep -E 'src|proto|mode'
sudo swanctl --list-sasРастот на бројачите на уредот со празен излез за состојба значи дека рутирањето работи, а политиката не се совпаѓа, обично грешка во идентификаторот или селекторот. Растот на бројачите на состојбата додека оддалечената страна не известува ништо значи дека пакетите излегуваат, но не пристигнуваат или не поминуваат автентикација, што упатува на патеката или конфигурацијата на партнерот. Наведено дете со нула сообраќај е проблем со селектор на едниот крај, а не расипан шифрар.
Одлучете кој ги инсталира рутите
Два сопственици за една табела за рутирање се вообичаен извор на треперење. Ако демонот инсталира рути автоматски, вашиот мрежен менаџер не смее исто така да инсталира стандардна рута низ истиот уред, а рачната рута додадена од скрипта за стартување ќе биде отстранета следниот пат кога демонот ќе се реконфигурира.
Изберете еден сопственик и запишете го тоа. Кога рутите му припаѓаат на демонот, држете ја скриптата за стартување надвор од табелата и оставете дефиницијата на врската да ги опише селекторите на сообраќај. Кога тие му припаѓаат на мрежниот менаџер, оневозможете автоматска инсталација и прифатете дека демонот нема да поправи рута што недостасува при повторно поврзување.
Правилата за проследување и огнениот ѕид се одделна одлука врз тоа, бидејќи порта што пропушта сообраќај на други домаќини ги бара и двете. IPsec заснован на рути го прави тој сообраќај лесен за изразување со обични алатки за рутирање; тој не го прави слојот на политика изборен.