我和iptables snat和isc dhcp有这个问题。情况就是这样:
我已经在我的网卡中配置了两个in。一级和二级
操作系统: 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创建一个以主IP(10.232.208.228)为源的DHCP提供。我使用了以下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以外的任何端口,它就会正常工作。
以下是syslog上的日志,说明不允许操作:
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没有其他规则,默认情况下它允许任何事情。
我尝试过使用root用户运行dhcpd,但没有成功。
我想了解正在发生的事情,并能解决这个问题。
发布于 2017-07-31 15:08:27
在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:67:10.232.208.229:67创建了连接,而且由于该连接已经存在,系统无法将匹配现有连接的数据包NAT。
https://serverfault.com/questions/865730
复制相似问题