LINUX.ORG.RU
ФорумAdmin

Не работает advanced routing


0

0

Есть на сервере два канала - основной и резервный, через GPRS.
Хочется мне чтобы через резервный канал висел всегда проброшеный openvpn-туннель до другого сервера, на случай ядерной войны Но весь остальной траффик до этого сервера шёл через основной канал. Т.е. зарулить только определнный порт через GPRS.

Делал так:

# iptables -t mangle -A OUTPUT -d 1.1.1.1 -p tcp --dport 1196 -j MARK --set-mark 1196

Пакеты маркируются:
# iptables -t mangle -L -nv | grep 1196
8 444 MARK tcp  — * * 0.0.0.0/0 1.1.1.1 tcp dpt:1196 MARK set 0x4ac

# ip route add default dev ppp64 table GPRS
# ip rule add fwmark 1196 table GPRS

Но при этом соединение на 1196 порт идет один фиг через основной канал.
Или такой механизм реализовать можно только если пакеты маркировать в PREROUTING? Но проблема в том, что пакеты от самого хоста, а не те, которые он форвардит, туда вообще не попадают.
Может как-то можно иначе сделать?

Скорее всего проблема возникает из-за очень кривой реализации сетевого стека в линухе. В частности, выбор исходного адреса для исходящих соединений производится по таблице main с покладанием прибора на весь policy-based routing. Мораль: добавь маскарад на интерфейс GPRS.

Или, если адрес статический, пропиши его в конфиг openvpn и юзай ip ru add from x.x.x.x table GPRS безо всяких iptables.

Ну и rp_filter не забудь отключить.

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

Всмысле маскарад добавить? Делать NAT локальных пакетов?

Или, если адрес статический, пропиши его в конфиг openvpn и юзай ip ru add from x.x.x.x table GPRS безо всяких iptables.

Адрес ессесно динамический :) Но я думаю на крайний случай сделать в ip-up генерацию конфига опенвпн и его запуск... уже с текущим адресом.

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

>Всмысле маскарад добавить?

iptables -t nat -I POSTROUTING -o ppp64 -j MASQUERADE

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