我有一台使用 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 中这不再可能)。