1、概述
前阵子在虚拟机中安装了docker,在其中有几个容器,包括redis、mysql,想着在idea中配置文件使用虚拟机对应的ip跟端口号,但ping通了虚拟机中的ip,端口号不通,最后解决了问题,特此记录(直接在虚拟机中安装mysql和redis也是类似的)
2、环境说明
- 主机环境为win10
- 虚拟机VMware 16
- Linux为centos 7
需要先配置好windows和虚拟机之间的网络互通,Windows能ping通虚拟机中的ip,同理,虚拟机也能ping通主机的ip,方便下一步的端口访问。
这里我电脑与虚拟机是用nat模式进行,主机网段192.168.1.0,虚拟机是192.168.118.0,子网掩码都是255.255.255.0。这一块的网络配置可以去网络搜一下,有很多相关教程,这里贴图给各位看看
第一张图片,window中本地ip和Vnet8的ip
虚拟机中进行nat网络连接的ens33适配器ip配置
本地主机和虚拟机的互通3、端口配置
3.1 关闭linux中的防火墙
需要先关闭防火墙,防止拦截。
centos中的命令:(Ubuntu有些命令不同,可另行百度命令进行对照)
#查看防火墙状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
关闭后的状态如下:Active变为inactive(dead)
docker中的端口号映射虚拟机对应的端口号。PS:如果直接在虚拟机安装数据库,redis,默认就是3306、6379,不需要管,确保能正常运行即可
3.2 端口配置
1、先安装iptables
yum install iptables-services -y
#安装完成,设置开机自启
systemctl enable iptables
2、接着进入对应的iptables配置路径中,ls命令列出文件,找到文件iptables。我的虚拟机一开始没有这个iptables文件,但大部分应该是有的才对,没有也没关系,下面编辑新创建一个就好。
cd /etc/sysconfig/
3、直接用如下命令,编辑iptables配置文件
vim iptables
#sample configuration for ip6tables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
如果没有iptables文件的,直接将上面整块复制放进去,保存配置就可以。
其中的3306、6379端口号,刚好对应我们的mysql和redis,以后想要配置其他的端口号,按照上面的文件去配置就可以,so easy
4、配置完成后,重启iptables即可。并设置iptables开机自启动
#重启
systemctl restart iptables
#开机自启
systemctl enable iptables
到这里,iptables配置完成
3.3 服务去除ip限制
由于redis中的配置文件会限制ip地址(mysql也有ip限制),所以需要在redis配置文件修改下。
由于我是docker安装的redis和mysql。需要修改docker映射的相关文件
如果是直接安装的redis,按照下面命令,然后找到bind的这行,修改127.0.0.1为0.0.0.0就可以
vi /etc/redis.conf
接着重启redis,即可完成访问。如果是docker中的容器,需要重启docker服务
systemctl restart docker
不然docker会报错,无法映射之前配置好的redis或mysql容器,报错如下:
docker: Error response from daemon: driver failed programming external connectivity on endpoint redis (容器ID): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6379 -j DNAT --to-destination 172.17.0.2:6379 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
这是因为我们前面虽然停止已经先停止了firewall,但是后面我们又安装了iptables来进行数据过滤。这与docker的端口映射起了冲突,重启docker就可以。
3.4 验证
在window使用任意的redis客户端(mysql客户端)进行验证
ip为虚拟机中的ip,端口号6379.
在Linux中登录redis,贴图为docker登录redis
不同的网段,也能成功访问到,Lucky!
4、总结
在配置中,可能会出现不同的问题,但总的步骤如前面所说,即可成功。
过程注意几点:
- 关闭防火墙
- iptables相关配置
- 相关服务去除ip访问/登录限制
- 重启服务
友情提示:使用虚拟机的小伙伴,可以使用快照功能,保存好配置,出了问题,可以快速回到之前状态
参考文章:
https://www.freesion.com/article/5403428698/
https://blog.csdn.net/weixin_65690979/article/details/127966265
https://blog.csdn.net/weixin_46244732/article/details/127969872
原文地址:https://blog.csdn.net/Bychanense/article/details/131648551
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。