CentOS7虚拟机和主机能互ping通,但主机不能访问虚拟机中的服务

发布于 2021-07-15  146 次阅读


主机和Centos 7虚拟机处在Nat网络环境下能互相ping通,CentOS 7虚拟机能访问自己开启的服务,但在主机上无法访问虚拟机开启的服务。

环境:

CentOS 7               Vmware虚拟机

Windows 10           主机

要访问虚拟机的Web服务地址:192.168.238.45:8080

解决方法:

在解决实验环境问题中,grey找到以下两种解决方法,其中SElinux是造成该问题的主要原因,grey通过关闭SElinux解决了实验中遇到的该问题,另一种方法则是关闭防火墙或者是在防火墙上放行相应的端口。

一、 关闭SElinux

SELinux(security enhanced linux)安全增强型linux系统,它是一个linux内核模块,也是linux的一个安全子系统。主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则),致使很多服务端口默认是关闭的。RedHat/CentOS或其他衍生工具时,SELinux服务是默认启用的,所以好多初学者明明配置文件正确,等验证时有时连ping也ping不通。建议初学者在未学到SELinux之前,配置服务器把SELinux关掉。

1. 查看SELinux状态

目前 SELinux 支持三种模式,分别如下:

enforcing:强制模式,代表SELinux运作中,且已经正确的开始限制domain/type了;

permissive:宽容模式:代表SELinux运作中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为SELinux的debug 之用;

disabled:关闭,SELinux并没有实际运作。

1.1 getenforce

getenforce 命令是单词get(获取)和enforce(执行)连写,可查看selinux状态,与setenforce命令相反。

setenforce 命令则是单词set(设置)和enforce(执行)连写,用于设置selinux防火墙状态,如:setenforce 0用于暂时关闭selinux防火墙,但重启后会失效恢复到/etc/selinux/config下,也就是说setenforce的修改是不能持久的。

[root@localhost ~]# getenforce

1.2 /usr/sbin/sestatus

SELinux status:selinux防火墙的状态,enabled表示启用selinux防火墙

SELinuxfs mount:selinux的相关文件资料挂载点

Current mode:selinux防火墙当前的安全策略模式,enforcing表示强

Mode from config file:设定档指定的模式

2. 关闭SELinux方法

2.1 临时关闭

如果不想重启电脑又想关闭SELinux的话,可以使用setenforce命令。

setenforce 0 :转成 permissive 宽容模式,用于暂时关闭selinux防火墙,但重启电脑后失效;

setenforce 1 :转成 Enforcing 强制模式

[root@localhost ~]# setenforce 0

[root@localhost ~]# /usr/sbin/sestatus

2.2 永久关闭

修改selinux的配置文件,重启后生效。

打开 selinux 配置文件

[root@localhost ~]# vim /etc/selinux/config

修改 selinux 配置文件

将SELINUX=enforcing改为SELINUX=disabled,保存后退出。

[root@localhost ~]# getenforce

Enforcing

此时获取当前selinux防火墙的安全策略仍为Enforcing,配置文件并未生效。

必须重启电脑修改的配置才能生效

[root@localhost ~]# reboot

验证

[root@localhost ~]# /usr/sbin/sestatus

[root@localhost ~]# getenforce

主机能正常访问虚拟机的Web服务

二、 防火墙常见命令

防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。

查看防火墙状态:

systemctl status firewalld

开启防火墙并设置开机自启:

systemctl start firewalld

systemctl enable firewalld

关闭防火墙并取消开机自启:

systemctl stop firewalld

systemctl disable firewalld

防火墙配置要开放端口,并重启防火墙:

firewall-cmd --zone=public --add-port=8080/tcp --permanent

firewall-cmd –reload

查看下要开放的端口是否生效:

firewall-cmd --zone=public --query-port=8080/tcp

查看指定区域开放的所有端口:

firewall-cmd --zone=public --list-ports

批量开放端口:

firewall-cmd --zone=public --add-port=100-500/tcp --permanent

查看批量开放端口是否生效:

firewall-cmd --zone=public --list-rich-rules

本站文章由渡缘人原创,如若转载请注明原文及出处:
https://www.hygrey.com/can-ping-each-other-but-unable-to-access-service.html

万物皆有裂痕,那正是光照进来的地方
最后更新于 2021-11-15