httpd 443端口只监听在tcp6上但ipv4也可以访问原理
本帖最后由 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 立即生效。
页:
[1]