作者 | JiekeXu
大家好,我是JiekeXu,很高兴又和大家见面了,今天和大家一起来怎么让虚拟机可以上外网?
今天使用 VMware 搭建完一台 CentOS7 的 Linux 虚拟机后,发现不能够使用 CRT 远程链接。报错“The remote system refused the connection”。
但是在虚拟机里打开一个终端便可以正常 ssh 远程登录。
相关设置如下
代码语言:javascript复制[root@localhost network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:73:11:51 brd ff:ff:ff:ff:ff:ff
inet 192.168.75.11/24 brd 192.168.75.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe73:1151/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:42:ee:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:42:ee:56 brd ff:ff:ff:ff:ff:ff
sshd 配置如下
代码语言:javascript复制vim /etc/ssh/sshd_condig
LoginGraceTime 0
PermitRootLogin yes
StrictModes yes
#MaxAuthTries 6
MaxSessions 50
UseDNS no
systemctl restart sshd.service
systemctl stop firewalld
systemctl status firewalld
网卡配置如下
代码语言:javascript复制YPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
NAME="ens33"
UUID="12550792-de37-403c-b072-7e9e81c7f97b"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.75.11
GATEWAY=192.168.75.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
NM_CONTROLLED="no"
检查了 sshd 服务,又重新安装了 openssh 服务,‘yum install openssh -y’
代码语言:javascript复制[root@localhost ~]# ps -e | grep ssh
9168 ? 00:00:00 sshd
19105 ? 00:00:00 ssh-agent
[root@localhost ~]# /bin/systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-05-04 04:49:51 PDT; 1h 3min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 9168 (sshd)
Tasks: 1
CGroup: /system.slice/sshd.service
└─9168 /usr/sbin/sshd -D
[root@localhost network-scripts]# cp /etc/selinux/config /etc/selinux/config_`date "%Y%m%d_%H%M%S"`&& sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@localhost network-scripts]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@localhost network-scripts]# setenforce 0
[root@localhost network-scripts]# getenforce
Permissive
[root@localhost network-scripts]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: disabled
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
[root@localhost network-scripts]# reboot
[root@localhost ~]# sestatus
SELinux status: disabled
相关服务均正常,Linux 防火墙也是关闭的状态,SELinux 也是关闭了,折腾了两个多小时,一层层抽丝剥茧,慢慢发现问题。
起初,网卡配置是基于以前 RAC 虚拟机配置修改的,但是再一次检查时发现少了一行“USERCTL=no”,而且首行 TYPE=“Ethernet” 由于粗心大意粘贴时少写一个字母“T”,重启网络服务时居然没有异常,也没能及时发现,将这两处错误修改之后,重启了主机也是无果。
USERCTL=no #是否允许非 root 用户控制该设备,设置为 no,只能用 root 用户更改。
附 Linux 网卡配置文件详解:
代码语言:javascript复制DEVICE=eth0 #指出设备名称
NM_CONTROLLED=yes #network mamager的参数,实时生效,不需要重启
ONBOOT=yes #设置为yes,开机自动启用网络连接
IPADDR=192.168.75.12 #IP地址
BOOTPROTO=none #设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp 开启DHCP服务
NETMASK=255.255.255.0 #子网掩码
DNS1=8.8.8.8 #第一个dns服务器
TYPE=Ethernet #网络类型为:Ethernet
GATEWAY=192.168.75.2 #设置网关
DNS2=8.8.4.4 #第二个dns服务器
IPV6INIT=no #禁止IPV6
USERCTL=no #是否允许非root用户控制该设备,设置为no,只能用root用户更改
HWADDR=00:0C:29:2C:E1:0F #网卡的Mac地址
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
NAME="eth0" #定义设备名称
最后,经过必应各种搜索,说 IP 冲突也会出现这种情况,于是乎检查了 VMware 配置的 IP 地址,net1 和 net8 查看了也都是 32.1 和 75.1 没有地址冲突,瞬间陷入了僵局,不知该如何查看了,休息片刻,补充弹药后继续排查。
终于想到了一个办法,既然此 75.11 的 IP 不能链接,那我改个 IP 试试呢,说改就改,将 75.11 改为 75.13 之后,重启网络,使用 CRT 便可以链接了。
代码语言:javascript复制[root@localhost network-scripts]# more /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
NAME="ens33"
UUID="12550792-de37-403c-b072-7e9e81c7f97b"
DEVICE="ens33"
ONBOOT="yes"
USERCTL=no
IPADDR=192.168.75.13
GATEWAY=192.168.75.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
NM_CONTROLLED="no"
[root@localhost network-scripts]#
[root@localhost network-scripts]# service network restart
Restarting network (via systemctl): [ OK ]
到这里才恍然大悟了,真的是由于 IP 地址冲突引起的,前面只检查了 VMware 的 IP 地址设置,没有检查 VBOX 的 IP 地址设置,经查看发现 IP 地址确实是 192.168.75.11 。。。
地址冲突会导致 CRT 无法远程连接,报错却是拒绝连接,现在想来也是,75.11 是 VBOX 的虚拟地址,当然也就无法使用 CRT 远程连接,在虚拟机里面设置 IP 地址为 75.11 也不会有地址冲突,他两属于不同的局域网环境,在虚拟机里使用 ssh root@192.168.75.11 也不会出此局域网,地址不会有冲突。就这样一个小小的问题,花了两个多小时,还是粗心大意导致的,以后,这类问题要多多注意,在此记录一番,谨防下次再犯。
最终解决办法
将 VBOX 虚拟机地址修改为其他 IP 地址,例如 75.254 或者其他网段也可以,可根据实际情况设置。将 Linux 端 IP 地址改回 75 11 即可。
虚拟机外网访问配置
最后,说一下 Linux 虚拟机配置可以上网的方法,虚拟机设置里网络适配器选择【NAT】模式,查看宿主机无线适配器关于 net8 的网络配置,然后 VM 里选择【编辑】——>【虚拟网络编辑器】——>【DHCP设置】,子网 IP 需要和前面看到的在同一网段里,然后选择 DHCP 自动获取。
然后,网卡配置如下:
代码语言:javascript复制[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# more ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
NAME="ens33"
UUID="12550792-de37-403c-b072-7e9e81c7f97b"
DEVICE="ens33"
ONBOOT="yes"
USERCTL=no
IPADDR=192.168.75.11
GATEWAY=192.168.75.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
NM_CONTROLLED="no"
然后虚拟机便可以上网了。
代码语言:javascript复制[root@localhost network-scripts]# ping www.baidu.com
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=128 time=9.37 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=128 time=12.0 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=3 ttl=128 time=13.8 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 9.379/11.773/13.896/1.853 ms
[root@localhost network-scripts]# ping cn.bing.com
PING china.bing123.com (202.89.233.100) 56(84) bytes of data.
64 bytes from 202.89.233.100 (202.89.233.100): icmp_seq=1 ttl=128 time=10.3 ms
64 bytes from 202.89.233.100 (202.89.233.100): icmp_seq=2 ttl=128 time=9.55 ms
64 bytes from 202.89.233.100 (202.89.233.100): icmp_seq=3 ttl=128 time=54.8 ms
64 bytes from 202.89.233.100 (202.89.233.100): icmp_seq=4 ttl=128 time=11.2 ms
^C
--- china.bing123.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 9.552/21.507/54.879/19.277 ms
参考链接
https://www.cnblogs.com/huangyj25/p/14896771.html