kkkgo / PaoPaoGateWay

PaoPao GateWay是一个体积小巧、稳定强大的FakeIP网关
https://blog.03k.org/post/paopaogateway.html
GNU General Public License v3.0
400 stars 30 forks source link

PPGW使用mode=socks5每次虚拟机冷启动后均无法访问网站 #11

Closed LR7SKQUO closed 1 year ago

LR7SKQUO commented 1 year ago

如题,冷启动后,再web ui中能看到proxies中有一个socks项,rules中也能看到Match socks。但本地电脑通过浏览器访问路由到PPGW的网站均提示ERR_CONNECTION_TIMED_OUT。若此时若修改ppgw.ini的mode为其他任意值,待PPGW读取后,再修改ppgw.ini的mode为socks5,再等PPGW读取配置后,电脑访问这些网站就OK。 在问题发生时,访问网站,PPGW的web ui Conns中看不到对应的条目,后台终端屏幕也看不到相关信息,似乎只有DNS的访问记录: image 问题“解决”后,访问网站,PPGW web ui能看到对应访问记录: image 请帮忙看一下是bug还是我的设置问题,谢谢!

网络拓扑如下,所有EXSI虚拟机均直通网卡 image iKuai:开启web服务7890端口(ppgw.ini),已设置静态路由7.0.0.0/8的网关为192.168.2.250,DHCP服务分配的DNS为192.168.2.253与192.168.2.251 PPDNS-*:undocked(alpine虚拟机直接运行),仅修改init.sh中 if [ "$MEMSIZE" -gt 2000 ]; thenif [ "$MEMSIZE" -gt 1500 ]; then 。debug.sh输出结果如附件。force_forward_list.txt见附件。 dnsdebug.txt force_forward_list.txt Openwrt:仅作为openclash的运行环境,未将其设置为旁路由。 PPGW:配置如附件。 ppgw.txt

kkkgo commented 1 year ago

你的ppgw是定制还是使用release下载的

LR7SKQUO commented 1 year ago

是从release下载的。paopao-gateway-x86-64-1d874e8.iso

kkkgo commented 1 year ago

冷启动是指什么情况?可以再描述一下吗

kkkgo commented 1 year ago

冷启动是不是指其他部分都正常运作的情况下,首次打开ppgw虚拟机后,无法正常工作?还是其他部分未开启之前就启动了ppgw

kkkgo commented 1 year ago

在无法正常工作的情况下,进行以下测试,以便定位问题,谢谢!

1. 使用本地电脑查询被代理域名的解析结果。比如
nslookup github.com
2. 进入ppdns的环境,使用以下命令查询解析结果,比如
dig github.com @127.0.0.1 -p5303
3. 在局域网任意linux终端上尝试使用ppgw的代理端口看看是否能用,比如
curl -d"info" --socks5-hostname 192.168.2.250:1080 https://ip.03k.org
LR7SKQUO commented 1 year ago

你说的两种情况,这边都有。无论是其他设备全部启动(并且openclash可正常翻墙后)以后,再启动PPGW;还是其他部分未开启之前就启动了ppgw,都会出现这个问题。

LR7SKQUO commented 1 year ago
C:\Users\********>nslookup github.com
服务器:  PaoPaoDNS,blog.03k.org
Address:  192.168.2.251

名称:    github.com
Address:  7.0.0.9

C:\Users\********>nslookup github.com 192.168.2.253
服务器:  PaoPaoDNS,blog.03k.org
Address:  192.168.2.253

名称:    github.com
Address:  7.0.0.9
vmpaopaodns1:~# dig github.com @127.0.0.1 -p5303

; <<>> DiG 9.18.16 <<>> github.com @127.0.0.1 -p5303
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48418
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 0
;; QUESTION SECTION:
;github.com.                    IN      A

;; ANSWER SECTION:
github.com.             60      IN      A       20.205.243.166

;; Query time: 229 msec
;; SERVER: 127.0.0.1#5303(127.0.0.1) (UDP)
;; WHEN: Fri Jul 14 12:02:08 CST 2023
;; MSG SIZE  rcvd: 55
vmpaopaodns2:~# dig github.com @127.0.0.1 -p5303

; <<>> DiG 9.18.16 <<>> github.com @127.0.0.1 -p5303
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22231
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;github.com.                    IN      A

;; ANSWER SECTION:
github.com.             60      IN      A       140.82.121.4

;; Query time: 709 msec
;; SERVER: 127.0.0.1#5303(127.0.0.1) (UDP)
;; WHEN: Fri Jul 14 12:02:30 CST 2023
;; MSG SIZE  rcvd: 55
[~] # curl -d"info" --socks5-hostname 192.168.2.250:1080 https://ip.03k.org
***代理服务器IP***
SG,undefined,undefined
ASN23764/CTGNet
HTTP/1.1 TLSv1.2
curl/7.81.0
Asia/Singapore Time: 7/14/2023, 12:03:10 PM[~] # 
kkkgo commented 1 year ago

好的,根据你的提供的描述,我测试下再回复您。

LR7SKQUO commented 1 year ago

另外,在出问题时 如果直接给电脑浏览器设置代理为ppgw的1080,是可以访问网站的。切换回无代理,再访问网站就又不行了。

kkkgo commented 1 year ago

麻烦在无法工作的时候,再进行以下测试:

1. ping代理的域名看看是否ping通。
ping github.com
2. 跟踪被代理域名的路由(如果是linux,使用traceroute)。
tracert github.com
3. 在ppgw虚拟机上,按下回车,输入以下命令,查看nft状态。
nft list ruleset
LR7SKQUO commented 1 year ago

ping不通。

ping github.com

正在 Ping github.com [7.0.0.9] 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

7.0.0.9 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

tracert在第2跳开始就没数据了。但ikuai的静态路由应该是没问题的,我用切换mode的方式处理的时候,是没有修改过静态路由的。另外,ikuai中还设置了其他SDWAN的静态路由,tracert正常。 image

tracert github.com

通过最多 30 个跃点跟踪
到 github.com [7.0.0.9] 的路由:

  1    <1 毫秒   <1 毫秒   <1 毫秒 192.168.2.1
  2     *        *        *     请求超时。
  3     *        *        *     请求超时。
  4     *        *        *     请求超时。
  5     *        *        *     请求超时。
  6     *        *        *     请求超时。
  7     *        *        *     请求超时。
  8     *        *        *     请求超时。
  9     *        *        *     请求超时。
 10     *        *        *     请求超时。
 11     *        *        *     请求超时。
 12     *        *        *     请求超时。
 13     *        *        *     请求超时。
 14     *        *        *     请求超时。
 15     *        *        *     请求超时。
 16     *        *        *     请求超时。
 17     *        *        *     请求超时。
 18     *        *        *     请求超时。
 19     *        *        *     请求超时。
 20     *        *        *     请求超时。
 21     *        *        *     请求超时。
 22     *        *        *     请求超时。
 23     *        *        *     请求超时。
 24     *        *        *     请求超时。
 25     *        *        *     请求超时。
 26     *        *        *     请求超时。
 27     *        *        *     请求超时。
 28     *        *        *     请求超时。
 29     *        *        *     请求超时。
 30     *        *        *     请求超时。

跟踪完成。
tracert 192.168.11.1

通过最多 30 个跃点跟踪到 192.168.11.1 的路由

  1    <1 毫秒   <1 毫秒   <1 毫秒 192.168.2.1
  2    <1 毫秒   <1 毫秒   <1 毫秒 192.168.2.3
  3   279 ms    50 ms    36 ms  192.168.11.1

跟踪完成。
kkkgo commented 1 year ago

在ppgw虚拟机上,按下回车,输入以下命令,查看nft状态。

nft list ruleset
LR7SKQUO commented 1 year ago

另外一个发现,使用PPGW 1080代理访问时,web ui Conns页中的Type列显示为“Socks5(tcp)”。 image 在没问题的时候,不使用代理访问网站,web ui Conns页中的Type列显示为“TProxy(tcp)”

LR7SKQUO commented 1 year ago

在ppgw虚拟机上,按下回车,输入以下命令,查看nft状态。

nft list ruleset

image

kkkgo commented 1 year ago

虚拟机内执行nft_tcp.sh后看看是否正常代理。

LR7SKQUO commented 1 year ago

虚拟机内执行nft_tcp.sh后看看是否正常代理。

执行后可以正常代理。另外,再次检查nft list ruleset,有以下输出。 image

kkkgo commented 1 year ago

此时执行以下命令,看看是否有输出。

ps | grep -v "grep" | grep "/etc/config/clash"
LR7SKQUO commented 1 year ago

image

kkkgo commented 1 year ago

看起来逻辑上应该不会出问题,但在加载clash后却忽略了nft规则的添加。但我测试了socks模式也正常。你可以把ppgw的启动过程日志录制下来吗?可以使用GifCam工具

LR7SKQUO commented 1 year ago

GIF 2023-7-14 13-05-15 这样可以么?

kkkgo commented 1 year ago

嗯,看到了日志确实没有触发添加规则,有可能是虚拟机平台结果差异,我稍后编译一个iso给你测试下。

kkkgo commented 1 year ago

测试下这个镜像是否正常工作。 paopao-gateway-x86-64-test202307141330.zip

LR7SKQUO commented 1 year ago

这个镜像工作正常

kkkgo commented 1 year ago

此问题在最新release中修复。https://github.com/kkkgo/PaoPaoGateWay/releases/tag/20230714-288a1db

kkkgo commented 1 year ago

另外对于你的网络拓扑,我可能有点好奇或者建议:

  1. 如果你想直接监听宿主网络,可以使用docker的host模式。使用docker并不会损失性能,可以方便更新或者重建服务。
  2. openwrt的功能可能与ppgw重合,你可以使用yaml或者suburl模式来完成openclash的功能。(如有协议不支持,你可以使用docker定制更换核心)
LR7SKQUO commented 1 year ago

感谢你的建议。

  1. 最初我是用docker来运行的,切换到虚拟机运行,确实是出于网络性能考虑。还有就是内存有些紧张(docker本身和Portainer的内存占用)。我在此参考此版本库上写了一个docker,在NAS中运行,启动后自动导出ppdns的程序到本地卷。通过smb将程序复制到虚拟机后,再执行一个自定义脚本一键将程序更新到虚拟机。更新起来也算方便。 如此使用将近半个月,发现undocked后给虚拟机1600MB左右内存,就能使用你定义的2000M对应的配置。
  2. openwrt除了运行openclash,还有DDNS,ACME,web shell,trojan server(用于在公网访问内网资源)等服务。另外在openclash中多个机场的订阅进行切换也方便一些,并且方便更新GEOIP。
kkkgo commented 1 year ago

使用subconverter等程序可以转换合并订阅。如果是基于force_forward_list来分流,GEOIP应该用不上。如果是基于非大陆IP分流,可以使用ppdns的AUTO_FORWARD功能,ppdns会自行更新IP库。关于GEOIP在ppgw中的实际作用,可以参见此链接:
https://github.com/kkkgo/PaoPaoGateWay/discussions/6#discussioncomment-6112812

LR7SKQUO commented 1 year ago

使用subconverter等程序可以转换合并订阅。如果是基于force_forward_list来分流,GEOIP应该用不上。如果是基于非大陆IP分流,可以使用ppdns的AUTO_FORWARD功能,ppdns会自行更新IP库。关于GEOIP在ppgw中的实际作用,可以参见此链接: #6 (comment)

我后面试试这个方式,谢谢!