LINUX.ORG.RU
ФорумAdmin

PBR & source address

 


0

1

ppl, столкнулся с такой проблемой. есть маршрутизатор, одним концом подключенный в интернет. задача заключается в том, чтобы локально генерируемые им пакеты имели default route через интернетовский интерфейс.

iptables -t mangle --new-chain MARK_0x200
iptables -t mangle --append MARK_0x200 --jump MARK 0x200/0xff00
iptables --append OUTPUT -m set ! --match-set localnet --goto MARK_0x200

ip route add 0/0 via 195.1.2.254 dev eth0.60 src 195.1.2.215 table 420
ip rule add fwmark 0x200/0xff00 pref 420 lookup 420

кроме того, существует маршрут по умолчанию в таблице main, который отваливается через ospf
default via 172.20.92.4 dev eth0.92 proto zebra metric 20

так вот - пакеты совершенно точно маркируются и уходят на нужный интерфейс, но с неправильным source адресом, а именно с тем, который указан в default route в таблице main.

есть у кого какие мысли по этому поводу ?
заранее всем мерси.

Чё думать, SNAT прописывать надо. Если приложение не указало src-адрес (не прибиндило сокет), то src адрес выбирается по маршруту в таблице main.

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

тут дело принципа и вопрос не приложении, а именно в самом ядре, т.к. тот же ping ведет себя подобным образом, чего происходить не должно.

dsmarker
() автор топика
Ответ на: комментарий от anonymous

помогло наполовину, а именно
- ответ на входящие пакеты идет с нужного адреса,
- у исходящих пакетов адрес по прежнему левый

думаю нужно пробовать крутить в районе sysctl

dsmarker
() автор топика
Ответ на: комментарий от dsmarker

тут дело принципа

Какого принципа? SNAT тоже в ядре, если что.

тот же ping ведет себя подобным образом

А ping, что, перестал быть приложением? Или як кляты москали наши ICMP-пакеты кличуты... :-)

думаю нужно пробовать крутить в районе sysctl

Обязательно напиши здесь, что такого ты смог накрутить в этом районе.

Ядру нужно определить адрес исходящего пакета как бы в момент передачи пакета от приложения к ядру, иначе как пакет пойдёт по цепочкам iptables с неопределённым src-адресом. Ядро не может заранее знать какое из правил iptables сработает и какую метку получит пакет, какое ip rule сработает и через какой интерфейс уйдёт пакет.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.