在VMware上安装RedHat Enterprise Linux8.4之后,进行注册时,发现设定为NAT模式的虚拟主机无法连接Internet。

# subscription-manager register --username=<UserName> --password=<Password> --auto-attach
Registering to: subscription.rhsm.redhat.com:443/subscription
Network error, unable to connect to server. Please see /var/log/rhsm/rhsm.log for more information.

在VMware上安装RedHat Enterprise Linux的方法,参照VMware Workstation上安装RedHat8

开始调查

虚拟主机的网络设定

确认该虚拟机,确实设定为NAT模式。选择虚拟机之后右击后点击菜单里的”设置”。

可以确认到,网络适配器设定为NAT模式。

确认虚拟机的IP地址

使用ifconfig命令查看,当前的IP设定。

# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:d2:db:11  txqueuelen 1000  (Ethernet)
        RX packets 574  bytes 39298 (38.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 256  bytes 21664 (21.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 256  bytes 21664 (21.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:81:e9:a9  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

发现ens160接口没有IP地址。

网络接口配置文件

/etc/sysconfig/network-scripts/ifcfg-ens160文件是配置接口相关设定文件,在这里发现ONBOOT被设定为no(ONBOOT=no)。

# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens160
UUID=c800b278-bfca-4a32-9a9d-fa47b15b36d9
DEVICE=ens160
ONBOOT=no  <- 把no改为yes,使OS启动时激活该接口

使用vi命令先把ONBOOT选项从no改为yes。

到此找到RHEL服务器启动之后,无法上网的原因了。

重启network服务

network服务

当执行”systemctl restart network”命令时,居然提示network服务不存在。

# systemctl restart network
Failed to restart network.service: Unit network.service not found.

nmcli命令(RHEL8)

简单查了一下,从RHEL8开始需要nmcli命令指定接口进行启动。使用”nmcli device”命令查看当前的连接情况,ens160没有任何连接。

# nmcli device
DEVICE      TYPE      STATE                   CONNECTION 
virbr0      bridge    connected (externally)  virbr0     
ens160      ethernet  disconnected            --         
lo          loopback  unmanaged               --         
virbr0-nic  tun       unmanaged               -- 

使用”nmcli con up ens160″命令进行连接。

# nmcli con up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

再次执行”nmcli device”和ifconfig命令查看连接及接口设定状态。

# nmcli device
DEVICE      TYPE      STATE                   CONNECTION 
ens160      ethernet  connected               ens160     
virbr0      bridge    connected (externally)  virbr0     
lo          loopback  unmanaged               --         
virbr0-nic  tun       unmanaged               -- 

# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.64.149  netmask 255.255.255.0  broadcast 192.168.64.255
        inet6 fe80::20c:29ff:fed2:db11  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d2:db:11  txqueuelen 1000  (Ethernet)
        RX packets 648  bytes 45313 (44.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 43  bytes 5294 (5.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

~ 省略 ~

重启主机确认

最后重启虚拟主机,确认启动后是否能够正常连接Internet。重启细末主机后执行如下命令进行确认。

执行nmcli device命令

确认ens160接口是否正常连接。

[root@moto001 ~]# nmcli device
DEVICE      TYPE      STATE                   CONNECTION 
ens160      ethernet  connected               ens160     
virbr0      bridge    connected (externally)  virbr0     
lo          loopback  unmanaged               --         
virbr0-nic  tun       unmanaged               --  

执行ifconfig命令

执行ifconfig命令确认ens160接口是否被分配了IP地址。

# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.64.149  netmask 255.255.255.0  broadcast 192.168.64.255
        inet6 fe80::20c:29ff:fed2:db11  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d2:db:11  txqueuelen 1000  (Ethernet)
        RX packets 29963  bytes 44348686 (42.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6828  bytes 409997 (400.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

~ 省略 ~

ping外网IP地址

使用ping命令检查是否能连接外网,这里的8.8.8.8是谷歌提供的DNS服务器。

[root@moto001 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=59.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=57.10 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=128 time=61.6 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 57.951/59.655/61.609/1.529 ms

小结

每次的OS版本升级都会有一些细微的变化,当无法连接Internet时进行了如下确认。

  1. 虚拟主机的网络适配器的配置是否正确
  2. 使用ifconfig命令确认接口的IP地址
  3. 确认/etc/sysconfig/network-scripts目录下的接口设定文件
  4. RHEL8开始需要使用nmcli命令管理(启动及停止)网络接口