Nginx 网络服务器不适用于全局 IPv6 地址

Nginx 网络服务器不适用于全局 IPv6 地址

最近我更换了我的 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 重新传输。Wireshark 捕获

此 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 是没有帮助的。

相关内容