LINUX.ORG.RU
ФорумAdmin

Source based routing

 , ,


0

1

Имеется маршрутизатор и 2 внешних сети (2 разных провайдера).
Нужно пробросить порт с отдельного ip адреса на первый провайдер.
При defaultroute на первый провайдер достаточно настроить проброс в вебморде роутера.
Но если defaultroute переносится на второй, то этот проброс работает только в одну сторону. Входящие пакеты с первого провайдера попадают на конечный сервер, но ответы от него попадают на второй.
Чтобы это исправить, сделал такое:

ip rule add from 192.168.1.10 table 100
ip route add table 100 0.0.0.0/1 dev ppp1

Теперь traceroute из 192.168.1.10 попадает в ppp1 как и полагается, но проброс портов не работает.
Куда копать?

★★★★★

Куда копать?

Если нет необходимости сделать это обязательно средствами iproute2, то я бы сделал -J REDIRECT средствами iptables.

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

Там скудная конфигурация ядра, почти на все попытки что-то сделать в iptables я получаю такое:

iptables: No chain/target/match by that name

А т.к я плохо понимаю что делаю, вряд ли найду рабочую комбинацию даже если она есть

mittorn ★★★★★
() автор топика

В доп. таблицы надо добавлять маршруты до локально присоединенных сетей.

ppp1 это первый или второй провайдер? И вообще, с этим осторожнее, т.к. номера у ppp-интерфейсов могут меняться.

На 192.168.1.10 можно повесить второй адрес, например 192.168.1.11, и сделать так:

ip rule add from 192.168.1.10 table 100
ip rule add to 192.168.1.10 table 100
ip rule add from 192.168.1.11 table 101
ip rule add to 192.168.1.11 table 101
# ppp0 - первый провайдер, ppp1 - второй
ip route add default dev ppp0 table 100
ip route add default dev ppp1 table 101
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport $port -j DNAT --to 192.168.1.10
iptables -t nat -A PREROUTING -i ppp1 -p tcp --dport $port -j DNAT --to 192.168.1.11
# локальные маршруты
ip route add 192.168.1.0/24 dev eth0 table 100
ip route add 192.168.1.0/24 dev eth0 table 101
Deleted
()
Ответ на: комментарий от Deleted

ppp1 всегда первый, второй всегда eth2

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

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

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

Локальная сеть - br0, в нём объединены eth0, eth1 и eth3
первый провайдер - ppp1
второй провайдер - eth2

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

Должен быть локальный маршрут до сетки 192.168.1.0/24 в таблице 100. Также должны быть оба правила:

ip rule add to 192.168.1.10 table 100
ip rule add from 192.168.1.10 table 100

Еще ты добавляешь маршрут до 0.0.0.0/1 в таблицу 100, может в этом дело? Добавь еще 128.0.0.0/1 или замени на default.

Если не поможет, то попробуй rp_filter поставить в 0:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ppp1/rp_filter
Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.