使用FreeBSD和Nginx使当前博客支持IPv6
大家好,我是无能。
从家里的手机环境向我的网站发送请求时,响应速度有点慢,我以为是错觉。但是,当我切换到au的移动网络访问时,速度反而变快了,所以我意识到这不是错觉,罪魁祸首可能就是没有支持IPv6。
操作
AAAA记录注册
我现在正在进行一些调整,可能有点混乱,但我要注册AAAA记录。
$ dig www.soulminingrig.com AAAA
; <<>> DiG 9.20.16 <<>> www.soulminingrig.com AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20103
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.soulminingrig.com. IN AAAA
;; ANSWER SECTION:
www.soulminingrig.com. 300 IN CNAME edge.soulminingrig.com.
edge.soulminingrig.com. 300 IN CNAME pool.soulminingrig.com.
pool.soulminingrig.com. 300 IN AAAA 2400:8500:2002:3317:163:44:113:145
;; Query time: 50 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)
;; WHEN: Tue Apr 07 20:38:20 JST 2026
;; MSG SIZE rcvd: 116Nginx
如果保持原样,Nginx不会监听IPv6,所以需要修改配置。
# git diff
diff --git a/site/soulminingrig.com.conf b/site/soulminingrig.com.conf
index 35f96e0..10c99d6 100644
--- a/site/soulminingrig.com.conf
+++ b/site/soulminingrig.com.conf
@@ -12,12 +12,14 @@ map $uri $static_cache {
server {
listen 80;
+ listen [::]:80;
server_name soulminingrig.com www.soulminingrig.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
+ listen [::]:443 ssl;
listen 443 quic reuseport;
listen [::]:443 quic reuseport;
http2 on;我完全没注意到,只有QUICK无用地支持了IPv6……不过,反正它在上游被阻止了,所以这也没什么意义……
pf
编辑FreeBSD的PacketFilter设置。
set skip on lo
set block-policy drop
set optimization conservative
wanint="vtnet0"
exsrv1 = 163.44.113.145
wg_net = "10.1.0.0/24"
wg_clients="{ 10.1.0.4, 10.1.0.2, 10.1.0.22 }"
wg_ports="{51820}"
scrub in on $wanint all random-id max-mss 1360
scrub out on $wanint all random-id max-mss 1360
scrub in all
scrub out all
nat on $wanint inet from $wg_clients to any -> $wanint
pass in on $wanint proto udp from any to ($wanint) port $wg_ports
block all
pass out quick keep state
~~~
pass in on $wanint proto udp to ($wanint) port 443 keep state
pass in on $wanint proto tcp to ($wanint) port {80, 443} keep state
目前我正在审查pf的设置,可能存在一些错误的描述,但我正在使用($wanint)进行动态路由。这意味着如果请求来自IPv6,规则将直接应用于IPv6;如果来自IPv4,则直接应用于IPv4。这消除了不必要的NAT转换。
然而,这次我只修改了HTTP相关的流量。虽然也有我个人使用的邮件服务器设置,但考虑到我主要将邮件服务器用于接收邮件,目前为其启用IPv6的意义不大,所以这次不进行处理。
确认
$ curl -vvv -so /dev/null https://www.soulminingrig.com 2>&1 | head
20:59:59.614252 [0-x] * [READ] client_reset, clear readers
20:59:59.680564 [0-0] * Host www.soulminingrig.com:443 was resolved.
20:59:59.680678 [0-0] * IPv6: 2400:8500:2002:3317:163:44:113:145
20:59:59.680806 [0-0] * IPv4: 163.44.113.145, 91.98.169.80
20:59:59.680958 [0-0] * [HTTPS-CONNECT] adding wanted h2
20:59:59.681086 [0-0] * [HTTPS-CONNECT] added
20:59:59.681188 [0-0] * [HTTPS-CONNECT] connect, init
20:59:59.681324 [0-0] * Trying [2400:8500:2002:3317:163:44:113:145]:443...
20:59:59.681605 [0-0] * [HTTPS-CONNECT] connect -> 0, done=0
20:59:59.681721 [0-0] * [HTTPS-CONNECT] Curl_conn_connect(block=0) -> 0, done=0完成!
话说回来,上次ConoHa的DNS记录中存在多个A记录时,当其中一个A记录指向的服务器宕机后,流量会自动分配到存活服务器的A记录地址,尽管这只是简单的轮询。看来这似乎只是HTTP客户端通过重试等方式处理得很好。
这样一来,即使是从出口IP基本上是IPv6全球IP的Starlink IP访问,也消除了NAT转换等成本,响应延迟等问题也顺利解决了。真是太好了。
未来展望
实际上,'记住IPv6'对于人类来说,记忆和管理起来似乎相当困难,但感觉未来它也会被大量用于恶意目的。
同时,在这次调整中,我重新检查了fail2ban的设置,确认在IPv6下也没有问题。
虽然现在是可以通过NAT转换等方式共存的时代,但作为开放的互联网,WWW的CGNAT感觉像是在创造一个封闭的互联网。也许IPv6现在更符合自由互联网的形式。但如果问我是否特意想有意识地使用IPv6,那感觉就有点微妙了。
从我自己的服务器日志文件来看,大约90%的客户端似乎仍然是IPv4,但这其中也包含大量bot。至于实际用户请求中IPv6的比例,也许确实已经相当普及了。
然而,如果谈及是否支持,仅就HTTP而言,我认为最好还是支持。但风险在于安全漏洞。这也可以说是人类的惰性。动态WAF等也并非没有可能只配置了IPv4。如果是在相当规模的部署中,我认为最好还是先从整理WAF和网络规则开始。