Маршрутизация пакетов в Linux

Linux отказывается маршрутизировать пакеты между сетевыми картами, кода пакет входит через один интерфейс а выйти должен через другой.

Такое случается при включенном rp_filter.

Как работает rp_filter:

Если ответ на текущий пакет не может уйти через тот же интерфейс (когда приходит через один интерфейс, а уходит через другой), пакет отфильтровывается.

Чтобы всё заработало, необходимо отключить rp_filter:
/sbin/sysctl -w net.ipv4.conf.default.rp_filter=0
/sbin/sysctl -w net.ipv4.conf.all.rp_filter=0

И редактируем файлик /etc/sysctl.conf :

net.ipv4.conf.default.rp_filter = 0

При необходимости можно указывать интерфейсы, например:

net.ipv4.conf.eth0.rp_filter=0

Однако не всегда так получается, что срабатывает опция net.ipv4.conf.all.rp_filter и тогда пробуем указать конкретные интефейсы: 

net.ipv4.ip_forward=1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth1.rp_filter=0
net.ipv4.conf.lo.rp_filter=0

 

 

unix-way