让Shadowsocks服务器同时监听IPv4和IPv6端口

中国电信的天翼校园宽带客户端简直令人发指,现在封锁越发厉害了,已经无法使用系统自带的PPPoE拨号了(所以刚买几天用来作服务器的ODROID-U3暂时下岗了……)。还好,学校有免费的IPv6网络,速度虽然不快,但是至少免费不限流量。正好我的VPS有IPv6地址,于是寻思着怎么利用VPS每月500G的流量来供我上网……一开始看了L2TP、OpenVPN等VPN的办法,发现让它们支持IPv6很麻烦。转念一想,不是还有Shadowsocks嘛!!!Shadowsocks支持IPv4/IPv6协议,但是一开始发现连上去显示套接字连接失败。

Google一圈发现Shadowsocks服务器也会读取config.json的server字段,所以如果填写的是IPv4地址的话,ss-server就只会在IPv4地址上监听,通过IPv6连接肯定就会不成功。修改一下config.json,其中server字段为:

"server": "::",

然后再重新启动一下Shadowsocks的服务端:

ss-server -c config.json -f /var/run/shadowsocks.pid

通过-f指定pid文件的方式使ss-server运行在后台,在CentOS里ss-server的输出将重定向到/var/log/messages,启动后可以通过netstat -nlp查看监听的端口,如果有:::SERVER_PORT(SERVER_PORT是ss-server监听的端口)就说明成功了。

此时ss-server是同时在IPv4和IPv6地址上监听的,无论客户端通过IPv4还是IPv6协议访问都能成功连接!重新配置一下代理服务器规则,利用IPv6和Shadowsocks免费畅游互联网吧!

P.S. 配合本地DNS服务器,或ipv6 hosts文件体验更佳!

Update: 本方法对于新的shadowsocks-libev失效,需要同时指定IPv4和IPv6地址(见评论)。

36 responses to “让Shadowsocks服务器同时监听IPv4和IPv6端口”

  1. tiancity avatar
    tiancity

    请问。~有v4和v6地址的vps,可以实现v4网络下访问v6网站么?
    用ss怎么实现啊~

  2. hellohello avatar
    hellohello

    这条好像现在不能用了。
    “server”:[“[::0]”, “0.0.0.0”],

    求证实:不设置sever这一行ipv6可用。
    https://github.com/shadowsocks/shadowsocks-libev/pull/234

    不设置sever,ipv4下是可以用的。

  3. 123 avatar
    123

    单独设置都能用
    但是改成这种监听两个的就不能连接
    日志显示积极拒绝

  4. 张 avatar

    Ramnode的ipv6 server可能确实用不了,

    1. lv avatar
      lv

      其实可以用,楼上有人说的是对的,我一直没来回复

      “server”:[“[::0]”, “0.0.0.0”]

      服务器这么写就行

      1. 张 avatar

        “server”:[“[::0]”, “0.0.0.0”] 却应如此,但是我试验了一周 还是打不通ipv6 后来才发现 原来Ramnode的ipv6防火墙默认打开 ,需要取消其防火墙,或者允许ipv6端口通过。此时,ramnode的ipv6终于可以在教育网下使用了。经验!!!

        1. tju3c avatar
          tju3c

          请问怎么关闭ipv6防火墙啊,我买的是Ramnode的vps 然后系统是debian 32位,用shadowsocks 做代理服务器,现在只能用ipv4连,服务器ip用ipv6地址就完全没用。

  5. Harvey avatar
    Harvey

    大家注意看这个 同时监听IPV4和IPV6请使用
    “server”:[“[::0]”, “0.0.0.0”]
    https://github.com/shadowsocks/shadowsocks-libev/issues/254

    1. Harvey avatar
      Harvey

      注意json格式的逗号 “server”:[“[::0]”, “0.0.0.0”],

  6. Harvey avatar
    Harvey

    libev版从1.6.4以后的2x版本 不管是用 “server”:”::0″,或者 “server”:”::”, V4都无法连接,V6未测试

    1. lv avatar
      lv

      确实,我试了好多次,不行,给开发者发邮件也不理。

      真不知道怎么办了,v4必须得写ip地址很烦人,万一ip被墙了,得一个一个

      改。

      1. Harvey avatar
        Harvey

        如果只是V4 你可以共用0.0.0.0

  7. lv avatar
    lv

    又重开了一台linode的服务器,装的ubuntu14.04,然后直接装shadowsocks,还是出现了那个问题,::用ipv4无法连接,直接用v4的ip可以v4连接,用v4连接的时候,服务器直接拒绝连接。
    之前一台linode的服务器除了shadowsocks之外,还装了不少别的东西
    不知道是不是有哪个配置没搞好,服务器肯定都支持v6.

    真搞不懂。头疼。

    1. yuikya avatar
      yuikya

      貌似新版改成用”server”:[“[::0]”,”0.0.0.0″],v4,v6就都可以连接了

      1. librehat avatar

        你说的那个好象是针对Python版的shadowsocks的,libev版我记得还是::,而且因为自己写了Qt版的shadowsocks,我自己还是倾向于::绑定全部地址的(简单明了)。

  8. zhxh avatar
    zhxh

    博主你好,我购买了ramnode的vps,可是貌似ipv6无法使用,ping6任何网站都不通,请问这一般是怎么回事啊

    1. librehat avatar

      自己去他们网站看清楚吧,现在IPv6是分配整个网段,你需要到VPS Control Panel去添加那个网段下的几个IPv6地址

    2. lv avatar
      lv

      ramnode确实比较怪异啊,有v6的ip但是server没法用::监控,如果用::的话,v4根本连不上,没v6环境,不清楚。linode就没这个问题,如果server用::的话,v4,v6都可以。

      1. librehat avatar

        肯定是你自己哪里配置的问题,我用的就是Ramnode的VPS

  9. smile avatar
    smile

    有个问题请教下,同时监听IPv4和IPv6端口后上网速度是叠加的吗

    1. librehat avatar

      监听两个协议的地址,和速度有什么关系?哪来的叠加?

      1. smile avatar
        smile

        譬如下载,那走的是v4还是v6的流量

        1. librehat avatar

          你连接的IPv4地址就是IPv4流量,IPv6就是IPv6流量呗。服务器流量你可以在服务器去监控

        2. fengidea avatar

          一般是使用域名作为解析。当你写IP地址时,填v4的时候v4的流量,填v6的时候v6流量。当时填写域名时,则看DNS返回的地址是v4还是v6的,如果域名有v6且你可以解析,则用v6.

  10. Chris avatar
    Chris

    请问用VPS搭建shadowsocks实现了IPv6代理之后 要怎么通过ipv6网络访问ipv4站点呢
    PS:学校ipv6很快可ipv4很慢且收费

    1. librehat avatar

      客户端里服务器地址填服务器的IPv6地址就好了啊。这样Shadowsocks就只会用IPv6连接服务器了。然后你全局代理全部走Shadowsocks代理就可以了。

  11. […] 最后,如果你想自己搭建一个ShadowSocks服务器的话,也很简单,只要你有一个可以科学上网的VPS即可。 Debian参考这里:http://teddysun.com/358.html,CentOS参考这里:http://teddysun.com/357.html。 对了,如果你也想让自己的服务器支持IP资源转换的话,可以参考:http://www.librehat.com/let-shadowsocks-server-listen-on-ipv4-and-ipv6-ports/,简单说来,就是把服务器IP设置为:"::"即可。(经过我测试,如果按照文中重启的办法不能生效的话,可以采用前面两篇文章里面使用的办法,两条命令即可。) […]

  12. gu avatar
    gu

    你好,设置监听ipv6地址时,具体应该怎样设置呢?我试了一下不得行,我的格式 “server”:”::2400:6180:0:d0::XXXX:XXXX”

    1. librehat avatar

      要么就用”server”:”::”要么就”server”:”2400:6180:0:d0:xxxx:xxxx”

      用”::”表示全部IP地址(包括转译的IPv4的地址),这样才能同时监听IPv4和IPv6。后者就只能监听在那一个IPv6地址上。

  13. gavin avatar
    gavin

    nodejs 版的 ss 支持 ipv6 么?

    1. librehat avatar

      我记得是支持的。Shadowsocks各个ports应该都支持的

      1. gavin avatar
        gavin

        最后用了 libev 版的,似乎不支持同时 v4 和 v6?
        设了 `::` 之后只看到 v6 的监听没看到 v4 的。

        1. gavin avatar
          gavin

          更正一下,支持同时 v4 和 v6 ……

          1. lv avatar
            lv

            我用的libev版本,设了::,v4根本没法连接,服务器直接拒绝连接端口,不知道是服务商的问题,还是shaowsocks版本的问题。

  14. 许晶东 avatar
    许晶东

    求共享IPV6的shadowsocks
    IPV6拯救世界
    shadowsocks拯救世界

    1. librehat avatar

      我的Shadowsocks是自用的,不共享。
      你可以自己买一个便宜的VPS(一年不到100块的都行),比如Ramnode家的。很多都有IPv6地址的,然后在上面用libev版的Shadowsocks作个server就可以了。