最近我更换了我的 ISP,它不提供任何不收取月费的公共 IPv4 地址(CGNAT),这就是我更改我的 Web 服务器(Ubuntu 22.04 和 Nginx)配置的原因,因此它可以通过全局 IPv6 地址供其他具有 IPv6 地址的人使用。(HTTPS 尚未配置)
但是,我现在面临一个问题,即如何通过 IPv6 访问我的网站。
我的IP配置:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 48:0f:cf:48:04:ac brd ff:ff:ff:ff:ff:ff
altname enp0s31f6
inet 192.168.1.127/24 metric 100 brd 192.168.1.255 scope global dynamic eno1
valid_lft 2692sec preferred_lft 2692sec
inet6 2a04:ee41:a:1135:4a0f:cfff:fe48:4ac/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2006054652sec preferred_lft 2006054652sec
inet6 fe80::4a0f:cfff:fe48:4ac/64 scope link
valid_lft forever preferred_lft forever
对于我的 UFW 防火墙,我打开了以下端口:
80,443/tcp (Nginx Full) ALLOW IN Anywhere
80,443/tcp (Nginx Full (v6)) ALLOW IN Anywhere (v6)
我的 Nginx 配置 /etc/nginx/sites-enabled/default:
server {
listen 80;
listen [2a04:ee41:a:1135:4a0f:cfff:fe48:4ac]:80;
server_name cybercluster.ch;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
输出nslookup cybercluster.ch
:
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: cybercluster.ch
Address: 2a04:ee41:a:1135:4a0f:cfff:fe48:4ac
输出ip -6 route
:
::1 dev lo proto kernel metric 256 pref medium
2a04:ee41:a:1135::/64 dev eno1 proto ra metric 100 expires 21474836sec pref medium
fe80::/64 dev eno1 proto kernel metric 256 pref medium
default via fe80::6e99:61ff:fe21:e4b7 dev eno1 proto ra metric 100 expires 287sec mtu 1488 pref medium
我曾尝试将全局 IPv6 地址添加为默认路由,但没有帮助,这就是我不久后将其删除的原因。
当输入curl [2a04:ee41:a:1135:4a0f:cfff:fe48:4ac]
或curl localhost
我得到位于 /var/www/html 的 index.html 文件的输出时。
通过在 Windows PC 上的浏览器中输入链接区域设置 IPv6 地址或本地 IPv4 地址,我成功登陆了我的网站。
但是,在浏览器中输入时cybercluster.ch
,[2a04:ee41:a:1135:4a0f:cfff:fe48:4ac]
我得到以下信息:
连接超时错误
我努力了https://ready.chair6.net/测试我的网站。
网络服务器可以成功 ping 我的 Windows PC 和路由器的全局 IPv6 地址。
网络服务器可以成功ping -6 ipv6.goole.com
:
PING ipv6.google.com(zrh04s16-in-x0e.1e100.net (2a00:1450:400a:808::200e)) 56 data bytes
64 bytes from zrh04s16-in-x0e.1e100.net (2a00:1450:400a:808::200e): icmp_seq=1 ttl=60 time=2.32 ms
64 bytes from zrh04s16-in-x0e.1e100.net (2a00:1450:400a:808::200e): icmp_seq=2 ttl=60 time=2.20 ms
64 bytes from zrh04s16-in-x0e.1e100.net (2a00:1450:400a:808::200e): icmp_seq=3 ttl=60 time=2.13 ms
^C
--- ipv6.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 2.132/2.216/2.322/0.078 ms
为了排除路由器防火墙存在问题的可能性,我尝试了:
- 在我的 Windows PC 上安装 XAMPP 并尝试使用全局 IPv6 地址访问网站,成功了。
- 尝试使用全局 IPv6 地址登录路由器的网络界面,成功了。
我的猜测是,网络服务器“不想走出局域网”。
我的 ISP 的客户服务没有帮助,因为根据他们的说法,这“超出了范围”。
有人有想法吗?我提前感谢你。
2024 年 2 月 21 日更新:
我在浏览器中输入 cybercluster.ch 时使用 Wireshark 捕获了流量。在捕获的流量中,我注意到每次尝试访问我的站点时都会发生 TCP 重新传输。
此 TCP 重传可能是什么原因造成的?
2024 年 2 月 22 日更新
我根据初始配置所做的更改如下:
- 变成
listen [2a04:ee41:a:1135:4a0f:cfff:fe48:4ac]:80;
listen [::]:80;
- 将远程端口从 80 更改为我的路由器的两个防火墙规则(评论中提到的规则)上的任意一个。
从那时起我一直尝试访问我的网站,但没有成功。
感谢我今天早上阅读的用户反馈,我现在知道该网站可供其他人使用。我再次与https://ready.chair6.net/并成功通过了我的网站。
但是,除非我停用 Windows 防火墙,否则我仍然无法在我的电脑上访问我的网站。
这可能吗?
答案1
一个简单的策略是让服务器在服务端口上侦听任何目标地址。在 nginx 中,不幸的是,如果仅指定端口号,v6 不是默认的。但是可以使用未指定的地址启用 v6:
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
我能够在端口 80 上收到 http 响应,显然是来自一个远离您的地址。您还应该测试来自非您的 ISP 的公共服务器,例如来自您最喜欢的云中的测试实例。以及不在同一层 2 的本地网络,例如您的不同 VLAN。
在多个位置启动数据包捕获:在浏览器主机上、在 Web 服务器上、在两者之间的交换机上。观察发往此 IP 的数据包是否离开用户代理主机,以及它们是否到达服务器。两者之间的防火墙可能不允许 LAN 到 LAN 或您拥有的任何区域。
基本主机 IPv6 网络简单且定义明确。请注意,路由器会自动发现并通过本地链接可用。您无需手动路由,路由器2a04:ee41:a:1135::/64
已经知道它,内核路由表显示它是通过 RA 发现的。
搜索商务级服务。不协助解决正在运行的“服务器”问题的 ISP 是没有帮助的。