找回密码
 立即注册
搜索
热搜: SDN 云计算 H3C
查看: 3548|回复: 0

[CentOS] httpd 443端口只监听在tcp6上但ipv4也可以访问原理

[复制链接]

16

主题

4

精华

0

回帖

注册会员

体力
78 卡
贡献
37 个
金币
80 枚
注册时间
2019-8-24
最后登录
2020-7-15

活跃会员灌水之王突出贡献最佳新人

发表于 2020-7-15 00:06:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Jason 于 2020-7-15 00:08 编辑

操作系统:CentOS7
httpd服务已经启动

# netstat -tnpl | grep 443
tcp6       0      0 :::443                  :::*                    LISTEN      1229/httpd

为什么如上命令只显示tcp6,而没有tcp ?

原因是监听了tcp6后,tcp也是可以用的。

虽然这个只显示了IPv6的端口监听,但并不代表只接受IPv6的连接,实际上,apache会以mapped address (::FFFF:a.b.c.d) 方式来接受IPv4的连接。除了少部分平台上,例如FreeBSD,NetBSD,OpenBSD之外, Apache在编译时,默认启用了 --enable-v4-mapped 选项。所以,Apache会同时接受IPv6和IPv4的连接请求。
除非是 IPV6_V6ONLY 模式开启,才需要两个不同的socket来分别监听IPv6和IPv4。
IPV6_V6ONLY模式可以通过 sysctl net.ipv6.bindv6only 来控制,默认是关闭的。如果你实在愿意在netstat中只看到IPv4端口的监听,那么,你可以修apache配置文件http.conf 中,将
Listen 80
修改为
Listen 0.0.0.0:80

查看程序是否强制绑定在ipv6上,查询方法:
执行命令:sysctl net.ipv6.bindv6only
如果结果显示net.ipv6.bindv6only = 0,说明程序并不是仅能绑定在 ipv6上。
修改方法:
编辑/etc/sysctl.conf,添加:net.ipv6.bindv6only = 1
执行sysctl -p 立即生效。

查看ipv4是否能够转发的方法:
执行命令:sysctl net.ipv4.ip_forward
当net.ipv4.ip_forward = 0,说明ipv4不能够进行转发。
修改方法:
编辑/etc/sysctl.conf,添加:net.ipv4.ip_forward = 0
执行sysctl -p 立即生效。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表