计算机从 DHCP 服务器获取 IP,但没有互联网连接

计算机从 DHCP 服务器获取 IP,但没有互联网连接

我在 Ubuntu 12.10 上安装了 isc-dhcp-server,并尝试在头节点上为本地网络中的六台工作计算机设置 DHCP 服务器。头节点本身是一个 DHCP 客户端,从网络中的另一台计算机接收 IP 地址 192.168.20.1(在 eth0 上)。

头节点上已启用 IPv4 IP 转发。在 /etc/sysctl.conf 中添加了以下行:

net.ipv4.ip_forward = 1

/etc/rc.local中设置了以下规则:

/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

此外,INTERFACES="eth0"在 /etc/default/isc-dhcp-server 中设置。

dhcpd.conf 文件包含(目前文件中只有一台工作计算机):

ddns-update-style none;

default-lease-time 3600;
max-lease-time 7200;

authoritative;

subnet 192.168.20.0 netmask 255.255.255.0 {
  range 192.168.20.2 192.168.20.200
  host hostName {
    hardware ethernet macOfHost;
    fixed-address 192.168.20.20;
  }
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.20.255;
  option routers 192.168.20.1;
}

工作节点有效获取 IP 地址 192.168.20.20,但没有互联网连接。ping 192.168.20.1 成功,ping 用作头节点的 DHCP 服务器的计算机(ping 192.168.1.1)也成功。问题似乎与 DNS 无关,因为 ping IP 地址(例如 8.8.4.4)失败。

更新

网络拓扑如下。有一个交换机连接一台计算机(可访问互联网并运行 DHCP 服务器,IP 地址为 192.168.1.1)和另外 7 台计算机。这 7 台计算机中的一台从 192.168.1.1 计算机获取 IP。它获取的 IP 是 192.168.20.1,并且该计算机上的互联网运行正常。现在我们在 192.168.20.1 上运行了一个 DHCP 服务器,以便为其他 6 台计算机提供互联网访问,但失败了。它们获得了 IP 地址,但无法访问互联网。我们不允许修改 192.168.1.1 节点上的任何内容,因此使用此设置应该可以使互联网正常工作。

有人知道可能是什么问题吗?

客户端上/sbin/route -n 的输出:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.20.1    0.0.0.0         UG    0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth1
192.168.20.0    0.0.0.0         255.255.255.0   U     1      0        0 eth1

sudo iptables -L -v -n 的输出: 链输入(策略接受 2146 个数据包,1551K 字节)数据包字节目标协议选择加入退出源目标

Chain FORWARD (policy ACCEPT 59 packets, 3762 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1908 packets, 213K bytes)
 pkts bytes target     prot opt in     out     source               destination

ip ro sh 的输出 默认通过 192.168.1.1 dev eth0 proto static 169.254.0.0/16 dev eth0 范围链接度量 1000 192.168.0.0/16 dev eth0 proto 内核范围链接 src 192.168.20.1 度量 1

答案1

您必须启用转发:

sysctl -w net.ipv4.ip_forward=1

上面这行代码会立即生效,但是下次重新启动系统时它就会消失。

对于持久设置,请输入以下内容/etc/sysctl.conf(但只有在重新启动后才会生效):

net.ipv4.ip_forward=1

答案2

Ubuntu 文档在其连接共享指南中非常详细地介绍了这一点:

https://help.ubuntu.com/community/Internet/ConnectionSharing

答案3

根据我的评论……

您正在尝试在 eth0 和 eth1 上使用相同的 IP。

将 eth1 上的子网更改为类似 10.10.0.0 /255.255.255.0 之类的值,然后一切就绪了。

答案4

现在一切都正常了。原来是 DNS 问题;将 改为option routers可以option routers 192.168.1.1解决问题。Ping 肯定在网络中的某个地方被阻止了,因为响应从未通过,但可以在浏览器中浏览特定的 IP 地址,这让我意识到 DNS 是问题所在。感谢大家的帮助。

相关内容