NAT правилото што требаше да ѝ даде на една група VPN клиенти сопствена јавна адреса стои на нула пакети, додека истата група сѐ уште излегува со погрешен извор. Правилото обично не греши во адресата; греши во интерфејсот. -o eth0:0 покажува на уред што не постои, зашто eth0:0 е ознака прикачена на адреса на eth0. Гледањето на бројачите е најбрзиот начин тоа да се потврди, а поправката е помала отколку што сугерира истрагата.

Провери како јадрото го нарекува уредот

Прочитај ги двата приказа одделно пред да смениш нешто:

ip link show
ip address show dev eth0
ip route get 203.0.113.20

Списокот на врски прикажува интерфејси. Списокот на адреси може да прикаже втора IPv4 адреса што ја носи ознаката eth0:0, а уредот за таа адреса сѐ уште е eth0. Прирачникот за адреси на iproute2 ја третира ознаката како име на адресата, не како втора врска, и токму во таа разлика е целиот проблем.

Историјата ја објаснува забуната. Старата ifconfig eth0:0 синтакса навистина изгледаше како нов интерфејс, и скриптите од тоа време сѐ уште упатуваат на еден. На денешен систем алијасот е ознака на адреса, и ништо на патот на рутирањето или netfilter не го третира како посебна излезна точка.

Провери на што правилото навистина се совпадна

Читај ги бројачите заедно со списокот правила, а не од паметење:

iptables -t nat -L POSTROUTING -v -n --line-numbers

Правило чиј бројач на пакети останува на нула додека тече соодветен сообраќај не се оценува, а условот за излезен интерфејс што именува eth0:0 е честа причина. Излезниот уред што го избра рутата е eth0, па условот што бара друго име никогаш не станува вистинит, без разлика која изворна адреса ја избрало јадрото.

Смени го условот на вистинскиот уред и остави ја ознаката надвор од него. Ако треба да разликуваш две групи клиенти што го делат тој уред, разликувај ги по изворен префикс, а не по име на интерфејс што не може да постои. Две правила со несовпаѓачки -s совпаѓања се читливи и проверливи; едно правило со измислен уред не е ниту едното ниту другото. На секое правило додај коментар што ја именува групата, зашто по шест месеци префиксот сам нема да каже никому зошто е таму.

Провери ја рутата што го избра уредот

Postrouting NAT работи откако рутата веќе избрала излезен интерфејс, затоа интерфејсот во правилото мора да биде оној што го избра рутата. Прашај го јадрото директно со ip route get за репрезентативна клиентска адреса и прочитај и уредот и изворот што го пријавува.

Ако одговорот именува eth0, делот за интерфејс на правилото е решен. Ако именува тунелски уред, пакетот никогаш не стигнува до правилото што го уредуваш, и пребарувањето се преместува на табелата за рутирање и нејзините приоритети. Правило што никогаш не се совпаѓа зашто пакетот излегол на друго место изгледа во излезот на бројачите исто како правило со погрешно напишан уред. Пред да уредиш нешто, потврди кој од двата случаи е твој, зашто вториот бара промена на рутирањето, а не на текстот.

Свесно избери го преведениот извор

Кога уредот е точен, изворната адреса е одделна одлука. Ова е само илустративна IPv4 група и примерна адреса:

iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
  -j SNAT --to-source 203.0.113.20

Впишувањето адреса во --to-source не прави никој да ја рутира назад кон тебе. Провајдерот од горниот тек или сопственикот на адресата мора да ги доставува одговорите за таа адреса до овој домаќин, а адресата мора да биде онаа што смееш да ја користиш. Ако не е, правилото ќе се совпадне и ќе преведе, а одговорите сепак ќе одат на друго место.

Менувањето на изворната адреса не е исто што и менување на горната врска. Кога вистинското барање е друг физички пат, политиката за рутирање прво мора да го избере тој пат; потоа SNAT го препишува изворот на уредот што го избрала политиката. Повеќе ознаки на eth0 не даваат ниту рута, ниту дозвола.

Провери со врска што штотуку си ја отворил

Отвори нова клиентска врска наместо повторно да ја користиш постојната. Следењето на врски го задржува преводот што го запишало при почетокот на текот, па стара сесија може да продолжи да ја користи претходната изворна адреса и да направи точно ново правило да изгледа расипано. Гледај како бројачот расте, потоа погледни го преведениот извор на жицата или на далечниот крај.

Кога неколку групи делат еден интерфејс, дај ѝ на секоја јасно совпаѓање на изворот и сопствена адреса за превод, држи ги во управуваната конфигурација на огнениот ѕид и забележи по кој редослед се оценуваат. Потоа запиши што си проверил: уредот од ip route get, бројачот што се помести и изворот што го виде далечната страна. Тој запис одговара на следниот извештај без да ја повторува забуната со алијасот.

Поврзани статии