IPv6与自建shadowsocks梯子

减少单一地址流量是防止服务器地址被认证的有效手段,IPv6 服务地址提供了海量地址资源,可让让自建梯更隐秘。即使v4地址已经阵亡,也可以用v6地址顶上。几种服务器端中,libev版本的配置较为复杂,其他比如Go语言、Python实现的,因为网络API已经封装好双协议监听,不需要特别配置。

shadowsocks-libev同时监听IPv4+IPv6

json 配置写法:

{
  "server":["::", "0.0.0.0"],
  ....
}

命令行写法:

ss-server -s 0.0.0.0 -s :: ....

docker 写法(mritd的影像为例):

docker run -dt --name ssv6 --network host mritd/shadowsocks -s "-s 0.0.0.0 -s :: -p 12018 -m aes-128-gcm -k mypassword --fast-open -u -6"

shadowsocks-libev出口选择IPv6优先

以前使用IPv6连打开Google容易遇上爬虫检测,现在反过来了,很多v4地址容易遇上爬虫检测。

libev版本因为DNS解释、Socket建立的过程都在程序内,所以双栈的选择需要在服务器程序配置。

json配置:

{
  "ipv6_first":true
}

命令行参数:

[-6] Resovle hostname to IPv6 address first.

Docker容器:

docker run -dt --name ssv6 --network host mritd/shadowsocks -s "-s 0.0.0.0 -s :: -p 12018 -m aes-128-gcm -k mypassword --fast-open -u -6"

注意docker的network这里用了host,是因为默认bridge的时候,如果没有给docker容器配置ipv6,会导致容器内没有ipv6资源,代理不能以ipv6往外访问。

 

客户端配置

IPv6的地址和端口的无歧义写法是这样:[2001:abcd:1234::1]:1234 ,即有中括号[]把地址包含在内。

客户端中如果是裸ss服务,不管是否用中括号都不影响,但是如果配搭KCP之类的插件,因为地址需要按参数传给kcp子进程,没有括号会导致kcp识别地址错误而失败。

因此客户端配置都推荐写上中括号。

json配置的例子:

{
  "server": "[2001:111:111::111:111:2]",
  "server_port": 12018,
  "password": "mypass",
  "method": "aes-128-gcm",
  "plugin": "",
  "plugin_opts": "",
  "plugin_args": "",
  "remarks": "lx-6",
  "timeout": 5
}

即使配置工作良好,但是Chrome浏览器在打开test-ipv6.com时候很可能还会提示:你已经有 IPv6 地址了,但你的浏览器不太愿意用,这一点比较令人担心。 主要因为Chrome对双栈策略上有fast fallback,虽然优先选择v6,但只要v6的链接建立超过0.3秒,就开始用v4去连接。所以即使完全配置正确,还是有可能撞上Google的人类检测,只能说是Google对IDC的IP段出口比较严格吧。

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.