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

iptables проброс портов только для определенного диапазона IP

Я использую контейнеры LXC. Каждый из моих контейнеров имеет IP-адрес в 10.0.3.0/24. Я хочу, чтобы пакеты, которые поступают на мой хост через определенный порт, перенаправлялись в контейнер, поэтому я использую это правило:

iptables -t nat -A PREROUTING -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000

Это позволяет делать (вне пакета) # -> HOST: 3000 -> CONTAINER: 3000

Отлично работает. Однако, когда я внутри контейнера (не того, который использовался в этом предыдущем правиле), и я хочу получить доступ к другому хосту (скажем, HOST2) через порт 3000, мой пакет перенаправляется в мой контейнер. Оно делает:

(внутри контейнерного пакета) # -> HOST2: 3000 -> HOST: 3000 -> CONTAINER: 3000

вместо (внутри пакета контейнера) # -> HOST2: 3000 -> HOST: 3000 -> HOST2: 3000

Я пытался изменить свое правило выше на

iptables -t nat -A PREROUTING -s 10.0.3.0/24 -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000

чтобы сказать: если пакет пришел из контейнера, не применяйте правило, однако это не работает. Любая помощь будет отличной, С уважением

Вот мои правила iptables:

Chain PREROUTING (policy ACCEPT 154 packets, 29925 bytes)
pkts bytes target     prot opt in     out     source               destination         
4   240 DNAT       tcp  --  *      *       10.0.3.0/24          0.0.0.0/0            tcp      dpt:3000 to:10.0.3.5:3000
3   180 DNAT       tcp  --  *      *       10.0.3.0/24          0.0.0.0/0            tcp   dpt:3001 to:10.0.3.6:3001

Chain INPUT (policy ACCEPT 126 packets, 28400 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 25 packets, 1900 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 29 packets, 2140 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   28  1525 MASQUERADE  all  --  *      *       10.0.3.0/24         !10.0.3.0/24

Под не работает, я имею в виду, что когда я скручиваю 3000 любых хостов из контейнера, я перенаправляюсь в свой контейнер: 3000

В -s flags выбирает только тот трафик, который соответствует указанному хосту или сети. Если вы хотите соответствовать всему трафику Кроме что, используйте

! -s 10.0.3.0/24

и не забудьте избежать этого ! из оболочки с помощью кавычек или обратной косой черты.