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

Пакет отправки isc-dhcp не разрешен при использовании iptables snat

У меня проблема с iptables snat и isc dhcp. В этом случае:

Я настроил 2 IP на своей сетевой карте. Первичный и вторичный

ОС: Ubuntu 16.04

2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:40:7a:08 brd ff:ff:ff:ff:ff:ff
    inet **10.232.208.228**/29 brd 10.232.208.231 scope global ens32
       valid_lft forever preferred_lft forever
    inet **10.232.208.229**/29 brd 10.232.208.231 scope global secondary ens32

Когда запрос DHCP поступает на вторичный IP-адрес (10.232.208.229), ISC DHCP создает предложение DHCP с первичным IP (10.232.208.228) в качестве источника. Я использовал следующее правило iptable snat для решения проблемы:

iptables -t nat -A POSTROUTING -p udp -o ens32 -s 10.232.208.228 --sport 67:68 -j SNAT --to-source 10.232.208.229:67

Проблема в том, что при переводе на 10.232.208.229:67 пакет DHCPOffer не отправляется. Если я поменяю порт на любой, кроме 67, он заработает.

Вот журнал системного журнала, в котором сообщается, что операция запрещена:

Jul 28 11:46:31 dhcp777rsv2 dhcpd[32364]: DHCPDISCOVER from d0:67:e5:30:18:90 (MXXXX) via 172.16.199.1
Jul 28 11:46:32 dhcp777rsv2 dhcpd[32364]: DHCPOFFER on 172.16.199.4 to d0:67:e5:30:18:90 (MXXXX) via 172.16.199.1
Jul 28 11:46:32 dhcp777rsv2 dhcpd[32364]: **send_packet: Operation not permitted**
Jul 28 11:46:32 dhcp777rsv2 dhcpd[32364]: dhcp.c:3693: **Failed to send 301 byte long packet over fallback interface.**

в моей таблице iptable нет других правил, и по умолчанию она разрешает все.

Я безуспешно пытался запустить dhcpd с пользователем root.

Я хотел бы разобраться в происходящем и смог решить эту проблему.

Прочитав netfilter.org, я нашел, в чем была моя проблема, и решил ее.

Мне пришлось добавить правило PREROUTING DNAT, чтобы эта работа работала:

iptables -t nat -A PREROUTING -p udp -d 10.232.208.229 --dport 67:68 -j DNAT --to-destination 10.232.208.228

Причина в том, что входящий пакет создал соединение с использованием источника x.x.x.x: 67 dest: 10.232.208.229: 67, и поскольку это соединение уже существует, система не может выполнить NAT для пакета, соответствующего существующему соединению.