Објавите LAN услугу на сопственој адреси VPN пролаза
Пратите прослеђени порт од клијента до уређаја и назад: ограничите превод одредишта, затим одлучите да ли се одговори усмеравају или преводе.
Приказивање LAN уређаја на једној од сопствених тунелских адреса пролаза захтева само један ред NAT-а. Веза ипак не успева, јер уређај који одговара не зна да је адреса клијента доступна кроз тај пролаз. Пратите пакет од клијента унутра, затим пратите одговор назад напоље, и половина која недостаје постаје очигледна.
Почните из угла клијента
Клијент у овом примеру налази се у VPN базену 10.62.0.0/24 и повезује се на 10.62.0.1 на порту 8080. Та адреса припада самом пролазу, па пакет стиже у језгро пролаза, а не код другог партнера. Иза пролаза LAN је 172.21.4.0/24. Пролаз држи 172.21.4.10, а уређај који заиста служи HTTP је 172.21.4.40.
Адреса која припада другом VPN партнеру није заменљива са сервисном адресом пролаза. Ако се клијент повезује на адресу партнера, ниједно правило пролаза уопште није укључено, и цео овај обилазак је погрешан случај.
Ограничите превод одредишта намерно
Уска верзија приказује један порт и преписује само одредиште. Пакет задржава протокол и извор, и то је оно што чини остатак обиласка занимљивим.
iptables -t nat -A PREROUTING -i tun0 -s 10.62.0.0/24 -d 10.62.0.1 -p tcp --dport 8080 -j DNAT --to-destination 172.21.4.40:80
Правило без критеријума протокола и порта је широка верзија: задржава који год порт је клијент изабрао и мења само адресу. То је легитимно када треба приказати целог хоста, а погрешно када једна услуга је била намера. Прочитајте правило поново и потврдите име интерфејса. DNAT правило на погрешном интерфејсу не одговара ничему, што даје исто временско ограничење као правило које недостаје и троши сат гледајући у уређај.
Нека се граница прослеђивања сложи
Превод мења заглавље, али не даје дозволу. Уз подразумевану политику одбацивања, прослеђени ток треба сопствену дозволу, а повратни смер треба правило успостављене везе које ваша политика вероватно већ има.
iptables -A FORWARD -i tun0 -o lan0 -d 172.21.4.40 -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Безусловна дозвола за сваки DNAT ток шира је од овог дизајна и дозволиће и мапирања која касније дода неко други. Именујте одредиште и порт, а остатак оставите затворен. Ако бројачи на правилу прослеђивања остану на нули док бројачи NAT-а расту, пакет се одбацује пре вашег правила. Читајте редослед ланаца уместо да додате другу копију.
Уређај мора некако да одговори
После превода уређај види извор у 10.62.0.0/24. Његов одговор иде на његов подразумевани пролаз, који је LAN рутер, а не VPN пролаз, осим ако му нешто не каже другачије. Два распореда то исправљају и нису еквивалентна. Рута на уређају или на LAN рутеру шаље 10.62.0.0/24 на 172.21.4.10 и чува извор клијента. Ограничен превод извора уместо тога скрива клијента иза LAN адресе пролаза.
ip route add 10.62.0.0/24 via 172.21.4.10 dev eth1
iptables -t nat -A POSTROUTING -s 10.62.0.0/24 -d 172.21.4.40 -o lan0 -p tcp --dport 80 -j SNAT --to-source 172.21.4.10
Изаберите према ономе што услузи треба. Политика по клијенту и смислени дневници желе усмерени облик; уређај коме се не може дати рута, или услуга која једноставно мора да види LAN адресу, показују на преведени облик. Не посежите за глобалним masquerade правилом да би један одговор прорадио. Оно скрива сваког клијента од сваког одредишта и тихо крши политике које зависе од изворних адреса.
Не тестирајте са самог пролаза
Захтев генерисан на пролазу ка 10.62.0.1 излази кроз ланац OUTPUT, а не кроз долазни PREROUTING. Његов неуспех или успех не говори ништа о правилу окренутом клијенту, и тако људи закључују да је исправно правило покварено.
conntrack -L | grep 172.21.4.40
tcpdump -ni any 'port 8080 or port 80'
Покрените прави захтев клијента и прочитајте оба. Унос у conntrack показује примењени превод, а снимци показују да ли је захтев прешао у LAN и да ли се одговор вратио ка тунелу. После промене правила користите нову везу, јер постојеће стање задржава раније мапирање и наставиће да пада на стари начин. Затим потврдите цео разговор: адреса уређаја, дозвола прослеђивања и рута одговора описују исти ток.