shadowsocks / shadowsocks-nodejs

https://github.com/shadowsocks/shadowsocks
Other
1.25k stars 724 forks source link

不能同时绑定IPv4和IPv6 #90

Closed Frederick888 closed 10 years ago

Frederick888 commented 10 years ago

Shadowsocks版本:1.4.6 nodejs Node.JS版本:v0.10.26 系统环境:Ubuntu 13.10 amd64 & Windows Server 2012R2 x64 网络环境:公网IPv6 & 原生IPv6

Ubuntu服务端配置文件(隐去了部分配置):


{
    "server": ["157.7.xxx.yyy", "2400:8500:1301:800:157:7:xxx:yyy"],
    "server_port": 2333X,
    "local_port": 3333X,
    "password": "mypassword",
    "timeout": 60,
    "method": "aes-256-cfb"
}

这样的话就只有IPv4能够正常工作,IPv6则不能正常工作 如果配置文件中先写IPv6再写IPv4,则情况相反,IPv4不能正常工作,IPv6能

通过检查端口占用情况,发现 如果先写IPv4,则

root@MyServer:/usr/lib/node_modules/shadowsocks# netstat -apn | grep 2333X
tcp        0      0 157.7.xxx.yyy:2333X      0.0.0.0:*               LISTEN      8957/node
udp        0      0 157.7.xxx.yyy:2333X      0.0.0.0:*                           8957/node
udp6       0      0 2400:yyy00:1301:80:2333X :::*                                8957/node

如果先写IPv6,则

root@MyServer:/usr/lib/node_modules/shadowsocks# netstat -apn | grep 2333X
tcp6       0      0 2400:yyy00:1301:80:2333X :::*                    LISTEN      9026/node
udp        0      0 157.7.xxx.yyy:2333X      0.0.0.0:*                           9026/node
udp6       0      0 2400:yyy00:1301:80:2333X :::*                                9026/node

也就是说先写哪个,才监听哪个IP。后面的虽然打开了UDP server,但是端口没监听

Windows下情况类似:

C:\Windows\system32>netstat -ano | find "2333X"
  TCP         153.121.xxx.yyy:2333X    0.0.0.0:0              LISTENING       3476
  UDP         153.121.xxx.yyy:2333X    *:*                                    3476
  UDP         [2001:e42:102:1204:153:121:xxx:yyy]:2333X  *:*              3476

C:\Windows\system32>netstat -ano | find "2333X"
  TCP         [2001:e42:102:1204:153:121:xxx:yyy]:2333X  [::]:0                 LISTENING       1768
  UDP         153.121.xxx.yyy:2333X    *:*                                    1768
  UDP         [2001:e42:102:1204:153:121:xxx:yyy]:2333X  *:*              1768