Коллеги, что то я совсем затупил.
Итак, дано:
1. Сервер с двумя сетевыми платами. Одна (192.168.43.6) смотрит в пользовательскую LAN, вторая 192.168.41.6 - служебная, внешняя.
2. Есть нужда добираться до служебной платы сервера из пользовательсткой сети "напрямую", не задействуя дополнительный маршрутизатор (с ним работает).
Решение:
1. На пользовательском компьютере явно добавляю маршрут на этот служебный интерфейс:
[console]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.41.6 192.168.43.6 255.255.255.255 UGH 0 0 0 br0
....
default 192.168.43.1 0.0.0.0 UG 0 0 0 br0
[/console]
2. На сервере включаю форвардинг пакетов:
[console]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[/console]
3. В iptables тоже прописываем форвардинг.
$IPT -A FORWARD -d 192.168.41.6 -j ACCEPT
# Включаем NAT
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
В результате - соединения с "хостом" 192.168.41.6 нет. Не пингуется даже. На входном интерфейсе сервера (tcpdump) есть только ICMP Echo request'ы c пингующей нужный интерфейс, replay'ев нет. На "служебном" интерфейсе - вообще нет активности при этом.
Если отключить у юзера прямую маршрутизацию - то все (почти) начинает работать. Но мне не нужно гнать трафик через дефолтный 192.168.43.1, мне нужно чтобы сам хост двухплатный пакеты перекинул на свой второй, внешний, интерфейс.
Кстати, если отключить "прямую" маршрутизацию, то "служебные" интерфейсы серверов откликаются. Но трафик на них идет через шлюз. При этом "служебный", внешний интерфейс шлюза так же не пингуется, как и не пинговались интерфейсы серверов при прямой на них маршрутизации.
Подскажите, что я недоделал? Где собака зарылась?