Ubuntu

電腦從 DHCP 伺服器獲取 IP 但沒有網際網路連接

  • November 9, 2018

我已經在 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,但它沒有網際網路連接。對 192.168.20.1 的 ping 成功,對作為頭節點 DHCP 伺服器的電腦的 ping 成功(對 192.168.1.1 的 ping)。該問題似乎與 DNS 無關,因為對 IP 地址(例如 8.8.4.4)的 ping 失敗。

更新

網路拓撲如下。有一個交換機連接一台電腦(可以訪問網際網路並執行 DHCP 伺服器,IP 地址 192.168.1.1)和其他 7 台電腦。這 7 台電腦中的一台從 192.168.1.1 電腦獲取 IP。它獲得的 IP 是 192.168.20.1 並且該電腦上的網際網路工作正常。現在我們在 192.168.20.1 上執行了一個 DHCP 伺服器,以便為其他 6 台電腦提供 Internet 訪問,但是失敗了。他們獲得 IP 地址,但無法訪問網際網路。我們不允許修改 192.168.1.1 節點上的任何內容,因此使用此設置使 Internet 工作應該是可行的。

有人知道問題可能是什麼嗎?

/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 的輸出: Chain INPUT (policy ACCEPT 2146 packet, 1551K bytes) pkts bytes target prot opt in out source destination

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

通過 192.168.1.1 dev eth0 proto static 169.254.0.0/16 dev eth0 scope link metric 1000 192.168.0.0/16 dev eth0 proto kernel scope link src 192.168.20.1 metric 1輸出 ip ro sh default

您必須啟用轉發:

sysctl -w net.ipv4.ip_forward=1

上面的行將立即工作。但下次重新啟動系統時會消失。

對於持久設置,將以下內容放入/etc/sysctl.conf(但它只會在重新啟動後生效):

net.ipv4.ip_forward=1

Ubuntu 文件在他們的連接共享指南中非常詳盡地介紹了這一點:

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

引用自:https://serverfault.com/questions/525671