目录
今天搞了个只有ipv6的机子,遇到了一个问题。我想访问ipv4的服务要怎办呢?
比较简单的是自己用双栈的服务器搭建一个代理socks,监听ipv6地址,然后从ipv4地址发出。
不过发现了一个有趣的东西:公共nat64,这里简单记录下,主要是https://nat64.net/ 。
dns64
https://nat64.net/ 需要使用以下dns 服务器地址。其作用是在解析的时候添加一个 ipv6 地址,而通过这个ipv6地址,我们可以访问到对应的ipv4。
2a01:4f8:c2c:123f::1
2a00:1098:2c::1
2a00:1098:2b::1
虽然文档是让我们把dns地址配置到机器上,达到全局自动配置,但也可以在程序中指定dns解析,实现一样的目的,后面我使用nslookup 和curl 举例。
nslookup 举例
这里用 nslookup 举例,该命令用于查询解析记录,并且可以指定解析服务器
使用 dns.google
nslookup bjun.tech
服务器: dns.google
Address: 2001:4860:4860::8844
非权威应答:
名称: bjun.tech
Address: 42.194.183.26
指定 dns64 为解析服务器
nslookup bjun.tech 2a00:1098:2b::1
服务器: UnKnown
Address: 2a00:1098:2b::1
非权威应答:
名称: bjun.tech
Addresses: 2a01:4f8:c2c:123f:64:5:2ac2:b71a
2a00:1098:2c::5:2ac2:b71a
2a00:1098:2b::1:2ac2:b71a
42.194.183.26
返回的结果多了3个ipv6地址。
nat64
wiki/NAT64
NAT64是一种通过网络地址转换的形式促成IPv6与IPv4主机间通信的IPv6过渡机制。NAT64网关是IPv4与IPv6协议间的转换器,它需要至少一个IPv4地址和一个包含32位地址空间的IPv6网段。为此服务保留的“已知前缀”是 64:ff9b::/96。
IPv6 客户端使用 IPv6 网段的主机部分嵌入它希望与之通信的 IPv4 地址,从而生成嵌入 IPv4 的 IPv6 地址(因此 IPv6 网段中的 32 位地址空间),并将数据包发送到生成的地址。NAT64 网关在 IPv6 和 IPv4 地址之间创建映射,可以手动配置或自动确定。
公共的nat64服务会帮我们实现以上过程,我们不用自己搭建。
使用 curl 测试
curl 有个配置参数 --resolve,可以指定解析记录。格式是: --resolve bjun.tech:443:[地址]
默认
curl https://bjun.tech/ip.php
string(15) "xxx.xxx.xxx.xxx"
....
指定解析地址以使用nat64
其中的[2a00:1098:2c::5:2ac2:b71a] 为上一步中nslookup 查询到的地址。
curl --resolve bjun.tech:443:[2a00:1098:2c::5:2ac2:b71a] https://bjun.tech/ip.php
string(14) "46.235.230.124"
string(14) "46.235.230.124"
array(5) {
["city"]=>
string(8) "英国--"
["registered_country"]=>
string(6) "英国"
["network"]=>
string(15) "46.235.224.0/21"
["location"]=>
array(2) {
["timeZone"]=>
string(13) "Europe/London"
["accuracyRadius"]=>
int(200)
}
["asn"]=>
array(3) {
["asn"]=>
int(44684)
["org"]=>
string(17) "Mythic Beasts Ltd"
["network"]=>
string(15) "46.235.224.0/21"
}
}
到此,我们成功用上了公共的nat64,实现了在存ipv6的机子访问ipv4服务
注意
使用公共nat64时,不建议有大流量的请求,并且由于机器内存等因素,有可能不稳定,有长时间稳定性需求的不建议使用。
参考
https://v6tools.kasperd.dk/nat64handoff/service
https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-nat64-dns64.html
https://developers.google.com/speed/public-dns/docs/dns64?hl=zh-cn
更多的公共dns64项目