Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

trojan-go似乎只绑定ipv6地址,没有绑定ipv4 #81

Closed
digits122 opened this issue Jun 5, 2020 · 5 comments
Closed

trojan-go似乎只绑定ipv6地址,没有绑定ipv4 #81

digits122 opened this issue Jun 5, 2020 · 5 comments

Comments

@digits122
Copy link

分别试验了trojan和trojan-go,
trojan在同时有ipv6和ipv4情况下,会按照设置内容绑定0.0.0.0:443
trojan-go在同时有ipv6和ipv4情况下,会绑定:::443,也即ipv6端口,ipv4没有绑定,端口仍然是空的未占用状态
已经使用netstat查看,不存在其他软件占用443端口,trojan和trojan-go没有同时启动,是分别试验的,配置除了trojan-go的一些特性以外,其他都是一样的

@teddysun
Copy link
Contributor

teddysun commented Jun 5, 2020

root 用户输入命令 netstat -nxtlp 查看端口占用情况。
通常情况下 :::443 是 ipv6 和 ipv4 都可以被访问到的。如下所示:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name      
tcp6       0      0 :::443                  :::*                    LISTEN      1376/trojan-go

@digits122
Copy link
Author

digits122 commented Jun 6, 2020

我这里使用netstat -tnlp,返回一些端口监听,输出如下
[root@mail ~]# netstat -tnlpx
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 1392/dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 1392/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 1392/dovecot
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11076/nginx: master
tcp 0 0 127.0.0.1:82 0.0.0.0:* LISTEN 11076/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 808/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1269/master
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 1392/dovecot
tcp6 0 0 :::995 :::* LISTEN 1392/dovecot
tcp6 0 0 :::110 :::* LISTEN 1392/dovecot
tcp6 0 0 :::143 :::* LISTEN 1392/dovecot
tcp6 0 0 :::80 :::* LISTEN 11076/nginx: master
tcp6 0 0 :::22 :::* LISTEN 808/sshd
tcp6 0 0 :::443 :::* LISTEN 14127/trojan-go
tcp6 0 0 :::993 :::* LISTEN 1392/dovecot

例如nginx程序绑定ipv4会有一条 tcp 0.0.0.0:80的输出,绑定ipv6的会有一条:::80的输出,这两个输出有分别显示,二sshd,dovecot,也都是类似。而这里trojan-go只在tcp6这里有一条绑定,我认为3个冒号是仅仅ipv6的,如果是既绑定了ipv4,又绑定了ipv6,为什么trojan-go不会像nginx一样,显示出两条绑定内容而只显示了一条?

@finalwhy
Copy link

加1,我的trojan-go也是这种情况

@p4gefau1t
Copy link
Owner

p4gefau1t commented Jun 16, 2020

Listen同时接受IPv4和IPv6的TCP连接, 这是Linux的默认行为,和trojan-go无关。尚且trojan-go做的,也仅仅是把配置文件中的地址交给go网络库处理而已。参考这里:

https://stackoverflow.com/questions/20657650/socket-listener-for-ipv6-and-ipv4

nodejs/node#9390

如果你需要像nginx那样严格地开启两个socket分别监听IPv4和IPv6的所有入站(0.0.0.0和::),可以修改源码,为socket添加IPV6_V6ONLY选项。

@pifeifei
Copy link

image

我 httpd 显示只绑定 ipv6 端口, 但是 192.168.0.73:88 也是可以访问的,lnmp 环境

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants