Я использую контейнеры 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
и не забудьте избежать этого !
из оболочки с помощью кавычек или обратной косой черты.