nxtrace / NTrace-core

NextTrace, an open source visual route tracking CLI tool
https://www.nxtrace.org
GNU General Public License v3.0
5.88k stars 347 forks source link

无法显示路由信息 #239

Closed Bryan2333 closed 6 months ago

Bryan2333 commented 6 months ago

本项目是基于Linux/macOS的,请确认您遇到的问题是否在Linux或macOS上存在。

你正在使用哪个版本的 nexttrace?

Linux build from source

你看到的异常现象是什么?

除了开始的节点和结束节点,其他节点的路由信息无法显示

_20240510_175042.webp

你期待看到的正常表现是怎样的?

正常显示路由信息

请附上你的命令

sudo nexttrace america.archive.pkgbuild.com

然后选IPv4地址

请附上出错时软件输出的错误信息

无错误输出

是否查询过本仓库wiki有没有类似错误

tsosunchia commented 6 months ago

可能是你网络中防火墙的问题

Bryan2333 commented 6 months ago

我感觉不太可能,我这边直接使用traceroute跟踪了一下对应的IP,是可以显示出来的。 _20240510_203921.webp

tsosunchia commented 6 months ago

你是在什么环境下运行的

Bryan2333 commented 6 months ago

我的系统是Arch Linux,然后用的是AUR上的这个包nexttrace

我电脑上用Nftables配了一个TProxy的透明代理。我尝试过把透明代理的规则删掉,但还是没办法显示出中间的路由信息。

tsosunchia commented 6 months ago

建议抓一下包

Bryan2333 commented 6 months ago

我用wireshark抓了ICMP的包。

这个是开启透明代理时的情况,nexttrace除了开始节点和结束节点以外的节点都显示不出来。 屏幕截图_20240510_205249

这个是关闭透明代理时的情况,nexttrace可以显示出部分路由。 屏幕截图_20240510_205547

Bryan2333 commented 6 months ago

顺便附上我的Nftables的规则

table inet clash_tproxy {
    chain prerouting {
        type filter hook prerouting priority mangle; policy accept;
        meta l4proto tcp socket transparent 1 meta mark set 0x00000001
        socket transparent 0 return
        ip daddr { 0.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.168.0.0/16, 224.0.0.0/3 } return
        ip6 daddr { ::1, fd00::/8, fe80::/10 } return
        tcp dport != { 22, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 5222, 8080, 8443 } return
        meta l4proto tcp meta mark set 0x00000001 tproxy ip to 127.0.0.1:7894 accept
        meta l4proto tcp meta mark set 0x00000001 tproxy ip6 to [::1]:7894 accept
    }
}
table inet clash_tproxy_local {
    chain output {
        type route hook output priority mangle; policy accept;
        meta skuid { 960, 961 } return
        ip daddr { 0.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.168.0.0/16, 224.0.0.0/3 } return
        ip6 daddr { ::1, fd00::/8, fe80::/10 } return
        tcp dport != { 22, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 5222, 8080, 8443 } return
        meta l4proto tcp meta mark set 0x00000001
    }
}
table inet clash_tproxy_dns {
    chain prerouting {
        type nat hook prerouting priority filter; policy accept;
        fib saddr type != local udp dport 53 redirect to :5333
    }

    chain output {
        type nat hook output priority filter; policy accept;
        meta skuid 961 return
        fib daddr type != local udp dport 53 redirect to :5333
    }
}
tsosunchia commented 6 months ago

大概看了一下, 这个问题,我觉得如果你去询问你所使用的代理软件的issue区可能更有用

tsosunchia commented 6 months ago

大概是你的nft哪里配的有问题

tsosunchia commented 6 months ago

我感觉不太可能,我这边直接使用traceroute跟踪了一下对应的IP,是可以显示出来的。

_20240510_203921.webp

你可以试试

traceroute --icmp

看看能不能正常trace

nextttace默认使用icmp

Bryan2333 commented 6 months ago

我试了,果然不行。我查了一下,Linux下traceroute默认用的是UDP协议,端口是33434。

我这边nexttrace改用UDP协议加上33434端口查询就好了,默认的53端口不行。

屏幕截图_20240510_212525