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