LINUX.ORG.RU

Hairpin NAT linux

 , , ,


0

2

Всем привет! Кто-нибудь в курсе как в линуксе организовать hairpin nat? Использую netmap для ната 1:1, но когда один клиент с натом 1:1 обращается к другому клиенту на этом же нате с 1:1, то маршрут идёт к аплинку и возвращается по обратному маршруту снова на нат и к клиенту. А как сделать так чтобы маршрут внутри ната проходил и сразу шел ко второму клиенту? На циске такое можно делать, думаю и на других тоже, а вот в линуксе пока не придумал как это сделать.

★★★

Ответ на: комментарий от mironov_ivan

Наверное не совсем то, вот то что нужно разрисовано на картинке https://supportforums.cisco.com/legacyfs/online/legacy/2/9/7/180792-NAT Hairp...

Пакет не уходит в интернет, девайс на котором маппинг проходит понимает что можно пакет прогнать через локальный интерфейс, правда ответ придет не с реального 1:1 адреса, а уже с локального адреса

init_ ★★★ ()
Последнее исправление: init_ (всего исправлений: 1)
iptables -t nat -A PREROUTING -d 1.1.1.1/32 -j NETMAP --to 192.168.1.1/32
iptables -t nat -A POSTROUTING -s 192.168.1.1/32 -j NETMAP --to 1.1.1.1/32
iptables -t nat -A PREROUTING -d 1.1.1.2/32 -j NETMAP --to 192.168.1.2/32
iptables -t nat -A POSTROUTING -s 192.168.1.2/32 -j NETMAP --to 1.1.1.2/32

сейчас использую такие правила для ната 1:1

Вот в таком случае пакеты от 192.168.1.1 странслируются в 1.1.1.1 и уйдут к аплинку, аплинк по назначению отправит их обратно на нат сервер и они странслируются уже непосредственно к 192.168.1.2 (с внешнего dst 1.1.1.2). Но как я думаю здесь, чтобы сделать reflection nat нужно исключить локальную трансляцию локальной сети по назначению нат сети, тогда по идее пакет должен уйти непосредственно к локальному адресу. Есть над чем подумать :)

init_ ★★★ ()
Ответ на: комментарий от slamd64

что зачем делать? у тебя есть большая сеть с BGP, ты не хочешь на BGP отдавать лишнюю нагрузку и ресурсы пропускной способности, сеть твоя, к которой относятся клиенты c натом 1:1, потому и нужен HAIRPIN NAT, а если у тебя BGP отвалится, твои клиенты могут обращаться друг к другу в своем сегменте

init_ ★★★ ()