Я пытаюсь использовать iptables, чтобы:
Вот команды, которые я пытаюсь использовать для этого:
sudo iptables -t mangle -A PREROUTING --destination 192.0.2.0 -j MARK --set-mark 11
sudo iptables -t nat -A PREROUTING -m mark --mark 11 -j DNAT --to-destination ${DESTINATION_IP}
sudo iptables -t nat -A POSTROUTING -m mark --mark 11 -j SNAT --to-source ${SOURCE_IP}
Похоже, первая команда MARK не собирает пакеты для маркировки их:
sudo iptables -vL -t mangle
Chain PREROUTING (policy ACCEPT 11892 packets, 1184K bytes)
pkts bytes target prot opt in out source destination
0 0 MARK all -- any any anywhere 192.0.2.0 MARK set 0xb
После этого более поздние правила не видят помеченных пакетов для изменения.
Прав ли я, думая, что pkts
, являющееся 0
для этого правила, означает, что оно не соответствует ни одному пакету?
Как мне следует маркировать пакеты, чтобы впоследствии идентифицировать и изменять ?
Пакеты локального происхождения проходят не через цепочку PREROUTING
, а через ВЫХОД
. Итак, если вы попытаетесь протестировать свои правила с того же хоста, вам следует добавить правило MARK
в цепочку mangle / OUTPUT
и правило DNAT
в ] nat / OUTPUT
цепочка.
В результате ваши правила будут выглядеть так:
sudo iptables -t mangle -A OUTPUT --destination 192.0.2.0 -j MARK --set-mark 11
sudo iptables -t nat -A OUTPUT -m mark --mark 11 -j DNAT --to-destination ${DESTINATION_IP}
sudo iptables -t nat -A POSTROUTING -m mark --mark 11 -j SNAT --to-source ${SOURCE_IP}
Кроме того, есть способ избежать маркировки и ссылаться на исходные (до перевода) адреса и номера портов.
sudo iptables -t nat -A OUTPUT --dst 192.0.2.0 -j DNAT --to ${DESTINATION_IP}
sudo iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT --ctorigdst 192.0.2.0 -j SNAT --to ${SOURCE_IP}
Кому получить список опций соответствия iptables или цели iptables, вы можете воспользоваться краткой встроенной справкой. Например:
iptables -m connmark --help
iptables -j DNAT --help
При устранении неполадок в правилах nat вы должны знать, что только первый пакет нового подключения проходит таблицу nat
.
Другими инструментами для устранения неполадок являются tcpdump
и conntrack
.