Здравствуте,Я пытаюсь настроить перенаправление всех коннектов на порт 161 через второй шлюз в то время как остальные коннекты должны идти на прямую.
Схема:
[локалхост] -> [впншлюз] -> [сервер] - OK
[локалхост] <- [впншлюз] <- [сервер] - пакет исчезает после впн туннеля. То есть я могу ответный пакет проснифать на tun0 но дальше он просто исчезаетпри этом -A INPUT -j ACCEPT стоит. В итоге приложение не видит ответный пакет и переотправляет его пока ему это не надоедает. С TCP пакетами происходит аналогичное, TCP-retransmission ловлю на шлюзе
на шлюзе обычный маскарад стоит даже без указания откуда и куда, короче если как шлюз указать главный все прекрасно работает
что я делал что бы настроить это шаманство
создал новую таблицу в rt_tables 201 gw1далее правила
ip route add default via 10.8.0.1 dev tun0 table gw1
ip rule add fwmark 0x1 table gw1
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 443 -j MARK --set-mark 1
iptables -A POSTROUTING -t nat -o tun0 -p tcp --dport 443 -j SNAT --to 10.8.0.2
iptables -A OUTPUT -t mangle -o eth0 -p udp --dport 161 -j MARK --set-mark 1
iptables -A POSTROUTING -t nat -o tun0 -p udp --dport 161 -j SNAT --to 10.8.0.2Ну вот и все собственно, и происходит указанная ситуация.
Пытался менять SNAT на маскарад на локалхосте - ничего не меняется все тоже самое.
DNAT еще ковырял но чето я не так делаю видимоМожет там какое-то очередная "фича" в sysctl.conf которую надо отключить или включить? Вечно это г*вно всю картину маршрутизации портит (извиняюсь, накипело уже)
Ах да система centos 7, но это не так важно я думаю
Похоже на косяк в маршрутах. Особенно если балуешься с NAT.Позови ребёнка (или ещё какого джуниора) и расскажи ему в лицах, что происходит с пакетом на каждом шаге. Сам разберёшься.
> Похоже на косяк в маршрутах. Особенно если балуешься с NAT.
> Позови ребёнка (или ещё какого джуниора) и расскажи ему в лицах, что
> происходит с пакетом на каждом шаге. Сам разберёшься.Я фрилансер) кота бы позвал, да и его нет)
В общем у меня адски горит жопа, потому что проблема была там где я предполагал
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flushвсе работает теперь, и правила правильные у меня
напридумывают дерьма какого-то потом разбирайся. Каждый раз об этот сраный sysctl.conf натыкаюсь, там новые опции появляются быстрее чем я живу.притом надо снять защиту от спуфинга на каждом интерфейсе именно! опция all не работает разумеется.
> Я фрилансер) кота бы позвал, да и его нет)тогда соседку (без соседа!), надеюсь соседка есть?
ей будет крайне интересно послушать увлекательный рассказ
о маршрутизации ма-аленьких таких себе пакетиков )))