[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

routing issue (iproute2 and DNAT)



Здравствуйте!

Схема следующая:

1. На сервере слушает приложение, допустим на адресе 1.1.1.1:10080
2. К серверу подключены 2 линка, по одному из них он доступен как
2.2.2.2 (interface eth0), по другому 3.3.3.3 (interface tun0).

80-е порты внеших адресов 2.2.2.2 и 3.3.3.3 DNAT'ятся на 1.1.1.1:10080
следующим образом:

/sbin/iptables -t nat -A PREROUTING -p tcp -d 2.2.2.2 --dport 80 -j DNAT --to-destination 1.1.1.1:10080
/sbin/iptables -t nat -A PREROUTING -p tcp -d 3.3.3.3 --dport 80 -j DNAT --to-destination 1.1.1.1:10080

3. Есть следующие правила iproute2:

0:      from all lookup local 
32765:  from 3.3.3.3 lookup tun0_net 
32766:  from all lookup main 
32767:  from all lookup default 

Ну и ip route list table tun0_net:

default dev tun0  scope link

То есть, пакеты приходящие на dst-ip 3.3.3.3 (без DNAT'а) получают ответ
от сервера в интерфейс tun0. Все остальное - по дефолту в eth0.

Но когда в дело включается DNAT - начинаются проблемы. Насколько я
понимаю, routing decision происходит _до_ DNAT'а. Соотственно, пакеты от
1.1.1.1:10080 раутятся в eth0 в любом случае. DNAT потом переписывает src-ip на
3.3.3.3, если пакет пришел через tun0, но поезд ушел, маршрут уже определен. Получается некрасивая
ассиметрия.

Какие есть пути решения этой проблемы? Я нашел ROUTE target в iptables,
по идее это можно использовать, но, насколько я понимаю, для этого нужны
патчи. А хотелось бы обойтись стандартными механизмами.
Или ROUTE на уровне iptables единственный вариант?

-- 
WBR,
Alexander Burnos



Reply to: