一次解决虚拟机内的服务不能访问经历

问题是这样的,在virtualbox中安装了centos系统,然后部署了一个自己的服务,在虚拟机内通过“127*”地址和“192*”地址都能正常访问,但是虚拟机外访问被拒绝

虚拟机内

[[email protected] dsp]# curl http://192.168.199.184:7050/debug/pprof/heap
heap profile: 141: 4782544 [1677: 16456768] @ heap/1048576
1: 1376256 [1: 1376256] @ 0x40e542 0x40d3f2 0x52859e 0x5427cf 0x4014b5 0x4323d0 0x462b61
1: 1376256 [1: 1376256] @ 0x40e542 0x40d3f2 0x52859e 0x542846 0x4014b5 0x4323d0 0x462b61
1: 688128 [1: 688128] @ 0x40e542 0x40d3f2 0x52859e 0x5427cf 0x4014b5 0x4323d0 0x462b61
1: 688128 [1: 688128] @ 0x40e542 0x40d3f2 0x52859e 0x542846 0x4014b5 0x4323d0 0x462b61
1: 524288 [1: 524288] @ 0x5493e6 0x54185e 0x4014b5 0x4323d0 0x462b61
3: 26112 [3: 26112] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61
27: 19008 [27: 19008] @ 0x40c424 0x5279a1 0x542846 0x4014b5 0x4323d0 0x462b61
1: 17664 [1: 17664] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61
7: 16128 [12: 27648] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61
21: 14784 [21: 14784] @ 0x40c424 0x5279a1 0x5427cf 0x4014b5 0x4323d0 0x462b61
3: 13824 [4: 18432] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61

虚拟机外

? dsp curl http://192.168.199.184:7050/debug/pprof/heap
curl: (7) Failed to connect to 192.168.199.184 port 7050: Connection refused
? dsp
? dsp

于是乎,检查网络端口监听是正常;7050端口确实监听正常,并且所有网络地址都监听了

[[email protected] dsp]# netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp6 0 0 :::7050 :::* LISTEN
tcp6 0 0 :::6379 :::* LISTEN
tcp6 0 0 :::10383 :::* LISTEN
tcp6 0 0 :::7089 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::8000 :::* LISTEN
[[email protected] dsp]#
[[email protected] dsp]#

到这里,开始怀疑是不是防火墙拒绝了访问,于是通过iptables查看防火墙规虑规则
-L|--list [CHAIN [RULENUM]] //列出指定链或所有链中指定规则或所有规则
-v|--verbose (x3) //查看规则列表时,显示更详细的信息
pkts 是被接受/拒绝的包的数量,

这里,第5条规则拒绝了75个包,现在问题已经明确了。需要去修改iptable的过滤规则

[[email protected] dsp]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1646 119K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 84 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
7 445 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
75 17712 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:3306
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8088
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:7050
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:10383
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:7089
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8000

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 1609 packets, 175K bytes)
pkts bytes target prot opt in out source destination

iptables中的规则如下,

[[email protected] dsp]#
[[email protected] dsp]# cat /etc/sysconfig/iptables
# sample configuration for iptables 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 -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#
COMMIT
[[email protected] dsp]#

大致意思是
1.只要是封包状态为 RELATED,ESTABLISHED 就予以接受
2.只要封包协议是 icmp 类型的,就予以放行
3.网络接口是lo的,无论任何来源 (0.0.0.0/0) 且要去任何目标的封包,不论任何封包格式 (prot 为 all),通通都接受
4.只要是传给 port 22 的主动式联机 tcp 封包就接受
5.全部的封包信息通通拒绝,并且发送一条host prohibited的消息给被拒绝的主机。

iptables的规则是按照顺序逐个拿来匹配数据包的,匹配成功则去执行相应的动作(accept/reject),如果一个数据包不能被前4个匹配到,那么一定会在第5个规则的时候匹配成功,按照第5个规则数据会被拒绝掉

回到本次问题中,我们的7050端口被执行了第5条规则。要解决此问题,我们只需要在第5个规则之前增加一条规则即可
-A INPUT -p tcp -m state --state NEW -m tcp --dport 7050 -j ACCEPT

[[email protected] dsp]#
[[email protected] dsp]# cat /etc/sysconfig/iptables
# sample configuration for iptables 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 7050 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#
COMMIT
[[email protected] dsp]#

然后
systemctl restart iptables

问题解决:

? dsp curl http://192.168.199.184:7050/debug/pprof/heap
heap profile: 141: 4782544 [1682: 16457312] @ heap/1048576
1: 1376256 [1: 1376256] @ 0x40e542 0x40d3f2 0x52859e 0x5427cf 0x4014b5 0x4323d0 0x462b61
1: 1376256 [1: 1376256] @ 0x40e542 0x40d3f2 0x52859e 0x542846 0x4014b5 0x4323d0 0x462b61
1: 688128 [1: 688128] @ 0x40e542 0x40d3f2 0x52859e 0x5427cf 0x4014b5 0x4323d0 0x462b61
1: 688128 [1: 688128] @ 0x40e542 0x40d3f2 0x52859e 0x542846 0x4014b5 0x4323d0 0x462b61
1: 524288 [1: 524288] @ 0x5493e6 0x54185e 0x4014b5 0x4323d0 0x462b61
3: 26112 [3: 26112] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61
27: 19008 [27: 19008] @ 0x40c424 0x5279a1 0x542846 0x4014b5 0x4323d0 0x462b61
1: 17664 [1: 17664] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5

参考资料
http://cn.linux.vbird.org/linux_server/0250simple_firewall.php
http://www.cnblogs.com/pixy/p/5156739.html
https://wiki.archlinux.org/index.php/Iptables_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
http://0x1.im/blog/server/use-linux-ubuntu-iptables.html

时间: 2024-12-28 22:35:39

一次解决虚拟机内的服务不能访问经历的相关文章

jedis 连接 虚拟机内redis服务

最近一直在玩关于redis集群,这个关于集群的具体设置步骤可以看这个做为参考, 我在虚拟机内建立的是一个1主3从2哨兵的模式 然后在windows环境下是配置了jedis(具体步骤可以参考这个人写的)建立测试类 然后我去启动的时候发现一个连接超时的错误 这个问题看上去好解决  因为网上的人一般都是说关闭防火墙就可以了 但是我打开终端输入命令, 结果是没有这个服务, 这又是什么情况?不过我想应该是这个方向的问题, 于是我打开了系统监听器,在进程中找到了一个firewalld的进程,哇  难怪我找不

解决虚拟机 centos 网络服务启动

现象: 1. 通过 ip addr 显示 eno16777736 适配器为 DOWN 状态 2. service status network 显示以下日志: .... 11月 05 15:30:10 localhost.localdomain systemd[1]: network.service: control process exited, code=exited status=111月 05 15:30:10 localhost.localdomain systemd[1]: Fail

解决虚拟机内Ubuntu时间比主机系统时间快8小时问题

主机系统win7, VMware12 Ubuntu16.04 安装完虚拟机后,发现时间刚好比win7时间快了8小时,时区啥的也设置正确了. 现已成功解决,步骤如下: 打开虚拟机终端,输入三行命令: timedatectl set-local-rtc 1 --adjust-system-clock sudo apt-get install ntpdate sudo ntpdate time.windows.com//从windows时间服务器对时 sudo hwclock --localtime

VirtualBox虚拟机内的系统时间无法调整的解决方法

VirtualBox虚拟机内的系统时间无法调整的解决方法 因试用某软件要求将系统时间设置在特定的日期,利用windows自带的调整日期/时间功能进行设置,发现过几秒钟就又恢复到和主机相同的时间了,即使把Internet时间服务器同步禁用了也是这样. 上网搜索终于找到解决方案了. 1. 先到管理工具->服务,将“windows time”服务停止并设为手动启动. 2. 打开虚拟机内的注册表,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service

解决虚拟机在桥接模式下设置静态ip,无法上外网的各种问题

虚拟机静态ip桥接模式的好处: 1.可以上外网下载软件包2.和宿主机处于同一网段,方便和同一局域网内电脑连接3.固定IP地址,方便查看服务 设置方法: 修改网卡配置,网络设置为桥接模式 vim /etc/sysconfig/network-scripts/ifcfg-ens33 问题一:重启网卡,有ip地址,无法连接外网 故障原因分析:虚拟机桥接的网卡没有和宿主机的当前网卡对应,简单说,比如我的宿主机此刻使用有线方式上网,而虚拟机桥接的网卡是本地无线网卡,自然无法连接外网 解决方法如下: 1.先

【linux】虚拟机内装Linux系统的ssh访问

一般在虚拟机内安装一个Linux系统,虚拟机网络设置为桥接后,Linux系统会在安装的过程中自动设置其为dhcp配置,会给其随机分配一个ip,这个ip可以用命令 "ifconfig" 查看.当然,这个命令需要在root权限下才可以用,或者普通用户拥有sudo权限. 如果没有在安装Linux系统时选择安装桌面,不出意外的话将进入纯指令终端界面. Linux原生终端窗口有几个缺点: 1.长宽固定,你没办法在一个界面看到更多内容: 2.无法上行,其他的窗口可以通过方向键向上向下翻页查看内容,

《深入理解Java虚拟机》:HotSpot虚拟机内的即时编译器

HotSpot虚拟机内的即时编译器 最近在看周志明老师的<深入理解Java虚拟机>这本书,看了之后感觉收获挺多的,于是就写点读书总结吧. 先看如下问题: 1. 为何HotSpot虚拟机要使用解释器与编译器并存的架构? 2. 为何HotSpot虚拟机要实现两个不同的即时编译器? 3. 程序何时使用解释器执行?何时使用编译器执行? 4. 那些程序代码会被编译为本地代码?如何便以为本地代码? Java程序最初是仅仅通过解释器解释执行的,即对字节码逐条解释执行,这种方式的执行速度相对会比较慢,尤其当某

Hive基础(4)---Hive的内置服务

版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] 一:Hive的几种内置服务 执行bin/hive --service help  如下: [html] view plain copy [[email protected] hive]$ bin/hive --service help ls: 无法访问/opt/spark/lib/spark-assembly-*.jar: 没有那个文件或目录

主机Window访问不了虚拟机Linux Samba服务提供的目录

笔者最近遇到的一个问题,虚拟机Linux中的Samba服务正常开启,主机通过"\\192.168.229.200" (我的虚拟机中Linux系统配置的静态地址)访问不了Share目录(/var/test),而且经过数次的重启,检查配置,再重启,都没法解决.后来突然想到了主机管理服务配置中虚拟机相关服务是否开启,才恍然大悟,因此写这篇短文和遇到类似问题的朋友们一起分享. 如果按照笔者之前写的这篇文章 虚拟Linux系统设置静态局域网地址与主机实现Samba服务 配置静态地址,安装并简单配