Linux路由器上的iptables不会在两个局域网之间转发DHCP

我有一个内部networking如下:

  • 作为路由器的Linux系统,使用iptables和两个网卡
  • 客户端机器
  • 一个DHCP服务器

路由器的eth1和客户端在同一个LAN上。
路由器的eth2和服务器在同一个LAN上。

客户端↔[eth1]路由器[eth2]↔DHCP服务器

我已经设置客户端使用DHCP,但我无法获得正确的iptable节工作(即转发客户端和服务器之间的DHCP UDP数据包。客户端给: An error occurred while renewing interface Local Area Connection 2 : unable to contact your DHCP server. Request has timed out. )。

这是现在的/etc/sysconfig/iptables ,其中#DHCP xxx注释之间的行是我想要的DHCP转发:

 # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A FORWARD -i eth1 -j ACCEPT -A FORWARD -i eth2 -j ACCEPT -A FORWARD -o eth1 -j ACCEPT -A FORWARD -o eth2 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -i eth1 -o eth2 -p tcp --dport 22 -j ACCEPT -A FORWARD -i eth2 -o eth1 -p tcp --sport 22 -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -i eth1 -o eth2 -p tcp --dport 80 -j ACCEPT -A FORWARD -i eth2 -o eth1 -p tcp --sport 80 -j ACCEPT -A FORWARD -i eth1 -o eth2 -p tcp --dport 53 -j ACCEPT -A FORWARD -i eth2 -o eth1 -p tcp --dport 53 -j ACCEPT -A FORWARD -i eth1 -o eth2 -p udp --dport 53 -j ACCEPT -A FORWARD -i eth2 -o eth1 -p udp --dport 53 -j ACCEPT # DHCP start -A FORWARD -i eth1 -o eth2 -p udp --dport 67 -j ACCEPT -A FORWARD -i eth2 -o eth1 -p udp --dport 67 -j ACCEPT -A FORWARD -i eth1 -o eth2 -p udp --dport 68 -j ACCEPT -A FORWARD -i eth2 -o eth1 -p udp --dport 68 -j ACCEPT # DHCP end -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT 

你能提出一些改变,使客户端机器可以从DHCP服务器获取IP地址吗?

笔记:

  • 路由器上的IP转发工作,因为我能够在客户端和服务器之间进行ping(反之亦然)。
  • 路由器是CentOs,客户端和服务器是Windows。

DHCP是一种不能转发的广播协议(在另一个networking上没有目标IP)。 你需要的是IP Helper向DHCP服务器显示(路由器必须作为一个DHCP中继代理,将广播转换成单播)。