ifconfig 没有使用新的 dhcp 提供的地址进行更新

ifconfig 没有使用新的 dhcp 提供的地址进行更新

我有一台使用 Ubuntu 17.10 服务器设置为路由器的机器。

我有三个以太网端口:一个用作 WAN [此处称为:${WAN}],另外两个用作 LAN。

我的 WAN 地址是 ISP 通过 DHCP 提供的。

/etc/network/interface

auto ${WAN}
iface ${WAN} inet dhcp

我已经ddclient安装了,因此我设置了一个脚本来测试它是否正常工作,以下是它的输出[为了安全起见略有更改]:

=================================================
WAN IP: via 'ip -4 addr show ${WAN}'
24.163.176.94
174.109.187.251
=================================================
External IP: via 'curl http://icanhazip.com'
174.109.187.251
=================================================
nslookup of mylan.us.to:
174.109.187.251

请注意通过列出的两个 IP ip -4 addr show ${WAN}。通常我的 ISP 会在这两个 IP 地址之间随机切换。在运行此脚本时,正确的 IP 是 174.109.187.251 地址。这让我检查了ifconfig显示的内容:

${WAN}: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 24.163.176.94  netmask 255.255.248.0  broadcast 24.163.185.255
        ether 90:fb:a6:88:a1:7a  txqueuelen 1000  (Ethernet)
        RX packets 823978  bytes 141634338 (141.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 93505  bytes 16976560 (16.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

你会注意到,inet通过ifconfig老的IP地址。

我尝试通过以下方式重新启动网络:

sudo service networking restart

我也重启了机器。它ifconfig仍然给出错误的 IP,并且ip -4 addr show ${WAN}继续显示两个 IP。

除了这两个问题之外,其他一切似乎都运行良好。NAT 正在进行 NATing,LAN 正在通过 WAN 转发,ddclient正在使用正确的 IP 地址进行更新,等等。

我对 Ubuntu 还很陌生,所以我的调试技能已经达到了极限,所以有什么想法为什么这个旧的 IP 地址仍然存在?

编辑:

sudo ifdown ${WAN}
Killed old client process
Internet Systems Consortium DHCP Client 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/enp1s0/90:fb:a6:88:a1:7a
Sending on   LPF/enp1s0/90:fb:a6:88:a1:7a
Sending on   Socket/fallback
DHCPRELEASE on ${WAN} to 142.254.207.161 port 67 (xid=0x7948571c)

然后:

sudo ifup ${WAN}
Internet Systems Consortium DHCP Client 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/${WAN}/90:fb:a6:88:a1:7a
Sending on   LPF/${WAN}/90:fb:a6:88:a1:7a
Sending on   Socket/fallback
DHCPDISCOVER on enp1s0 to 255.255.255.255 port 67 interval 3 (xid=0x92b2b512)
DHCPDISCOVER on enp1s0 to 255.255.255.255 port 67 interval 6 (xid=0x92b2b512)
DHCPREQUEST of 174.109.187.251 on ${WAN} to 255.255.255.255 port 67 (xid=0x12b5b292)
DHCPOFFER of 174.109.187.251 from 69.134.11.87
DHCPACK of 174.109.187.251 from 69.134.11.87
bound to 174.109.187.251 -- renewal in 28592 seconds.

然而,在系统日志中:

5924:Nov 16 17:23:30 router systemd-networkd[528]: enp1s0: DHCPv4 address 24.163.176.94/21 via 24.163.72.1

为什么会有这种差异?

对于评论者说/etc/network/interfaces已被弃用:

cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    ${WAN}:
      dhcp4: yes

答案1

根据文档,IFUPDOWN 并未预装在 Ubuntu 17.10 上,但在安装过程中的某个时候我一定安装了它(尽管我不记得这样做过)。

结果,我让 IFUPDOWN 发出 DHCP 客户端请求,让 networkd 发出第二个 DHCP 客户端请求。IFUPDOWN 会从我的 ISP 接收一个 IP,而 networkd 会接收另一个。

由于我更熟悉 IFUPDOWN 配置网络的方式(以及使用该方式的每种“构建路由器操作方法”),因此我决定严格使用 IFUPDOWN。

在继续删除 NETPLAN 之前,请确认您已安装 IFUPDOWN: sudo apt-get install ifupdown

然后我通过以下步骤禁用了 netplan:

cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    ${WAN}:
      dhcp4: yes

我将其修改为:

/etc/netplan/01-netcfg.yaml
    # This file describes the network interfaces available on your system
    # For more information, see netplan(5).
    network:
      version: 2
      renderer: networkd
      ethernets:

...重新启动并解决了我看到的两个不同 DHCP 提供的 IP 地址的问题,这向我证实了 IFUPDOWN 现在可以按预期正常工作。

我通过三种方式检查了这一点:

  • ip -4 addr show ${WAN} | grep -oP '(?<=inet\s)\d+(\.\d+){3}'- 仅看到一个我期望的 DHCP 提供的地址
  • curl http://icanhazip.com- 查看我期望的地址
  • route- 查看我在链中期望的地址。

然后我根据 netplan wiki 禁用了 netplan:https://wiki.ubuntu.com/Netplan修改了我的 grub 配置:/etc/default/grub 更改行:

GRUB_CMDLINE_LINUX="ipv6.disable=1 netcfg/do_not_use_netplan=true"

...执行:sudo update-grub,然后重新启动机器。

然后我执行:

journalctl -p err
Nov 17 11:09:42 router systemd[1]: Failed to start Raise network interfaces.

因为我不喜欢看到错误,所以我发出了:sudo rm /lib/systemd/system-generators/netplan[这只是一个符号链接/lib/netplan/generate],然后再次重新启动。

'journalctl -p err',没有错误。

grep netplan /var/log/syslog
Nov 17 13:12:07 router kernel: [    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.13.0-16-generic root=UUID=1e26c91e-0805-44f7-9ae3-3a707fa0d311 ro ipv6.disable=1 netcfg/do_not_use_netplan=true

...没有错误。

据我所知,netplan 实际上已被禁用(尽管在以前的版本中您可以使用 apt-get 完全卸载它,但在 17.10 中这不再可能)。

相关内容