Назад | Перейти на главную страницу

Перенаправление портов для 100К + IP

Мне нужно сделать переадресацию портов на моем Linux (Debian 8) для перехвата пакетов, проходящих через машину.

Он должен быть основан на IP-адресе источника, поэтому разные порты для разных IP-адресов.

Я хотел использовать iptables напр.

iptables -t nat -A PREROUTING -s 10.1.10.78/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 10.1.10.31/32 -j REDIRECT --to-port 4444
iptables -t nat -A PREROUTING -s 10.1.10.79/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 10.1.10.21/32 -j REDIRECT --to-port 5000

Но похоже, что при превышении более 20К правил машина становится медленной, и iptables может оказаться правильным решением. Теперь я могу масштабировать машину, но есть ли лучшее решение, кроме iptables для этой "простой" задачи?

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

Вам нужно сначала подумать о том, как назначить IP-адреса разным цепочкам. В этом небольшом примере я буду использовать IP-подсети.

# Create custom chains
iptables -t nat -N chain-net-192.168.1.0/24
iptables -t nat -N chain-net-192.168.2.0/24
iptables -t nat -N chain-net-192.168.3.0/24

# Let appropriate connection jump to proper custom chains
iptables -t nat -A PREROUTING -s 192.168.1.0/255.255.255.0 -j chain-net-192.168.1.0/24
iptables -t nat -A PREROUTING -s 192.168.2.0/255.255.255.0 -j chain-net-192.168.2.0/24
iptables -t nat -A PREROUTING -s 192.168.3.0/255.255.255.0 -j chain-net-192.168.3.0/24

# Inside chain-net-192.168.1.0/24 perform actions
iptables -t nat -A PREROUTING -s 192.168.1.15/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.1.25/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.1.35/32 -j REDIRECT --to-port 4321

# Inside chain-net-192.168.2.0/24 perform actions
iptables -t nat -A PREROUTING -s 192.168.2.15/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.2.25/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.2.35/32 -j REDIRECT --to-port 4321

# Inside chain-net-192.168.3.0/24 perform actions
iptables -t nat -A PREROUTING -s 192.168.3.15/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.3.25/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.3.35/32 -j REDIRECT --to-port 4321

Для получения дополнительной информации о пользовательских цепочках iptables см. Linux Server Hacks в O'Reilly.

Может стоит посмотреть nftables. Он превосходит netfilter / iptables во многих случаях.

Он перенесен на debian 8 согласно https://wiki.debian.org/nftables