sing-box
sing-box copied to clipboard
对外提供nginx服务的服务器主机,使用singbox后,对外服务会无法连接
操作系统
Linux
系统版本
Ubuntu22.04
安装类型
sing-box 原始命令行程序
如果您使用图形客户端程序,请提供该程序版本。
No response
版本
1.9.4
描述
服务器主机内的网络结构:
- 服务器主机只有单物理网卡eth0;
- nginx是容器服务,运行在docker内,使用的是docker的bridge网卡,docker配置端口映射443,对外提供服务。
- singbox,直接在主机上命令行方式运行,并开启tun网卡;
故障现象与分析:
- 启动singbox后,外网访问nginx服务,就无法连接。使用tcpdump抓包eth0网卡,有入包,但没有出包;关闭停用singbox后,nginx对外服务恢复。
- 启动singbox后,外网访问nginx服务,就无法连接。使用tcpdump抓包tun网卡,无入包也无出包。
- 启动singbox后,进入nginx容器,使用ping、curl均能访问国内、国外外网。
重现方式
详见描述
日志
No response
支持我们
- [ ] 我已经 赞助
完整性要求
- [X] 我保证阅读了文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
- [X] 我保证提供了可以在本地重现该问题的服务器、客户端配置文件与流程,而不是一个脱敏的复杂客户端配置文件。
- [X] 我保证提供了可用于重现我报告的错误的最简配置,而不是依赖远程服务器、TUN、图形界面客户端或者其他闭源软件。
- [X] 我保证提供了完整的配置文件与日志,而不是出于对自身智力的自信而仅提供了部分认为有用的部分。
再次排查了一下,确定了是只有eth0有入包,然后包是在tun网卡上被丢掉的,根本没进到容器服务里。
有一个解决方案,现在临时规避了,tun添加配置:"exclude_interface": "nginx"。让sing-box设置排除nginx的容器所在的网卡。这样sing-box会自动在ip rule里添加一条路由规则,到nginx网卡的包不走tun。 这样只有nginx网卡不能访问外网,用其他的虚拟网卡则不受影响可以走tun,从而访问外网。
这个故障应该是ip_is_private不起作用引起的,本地ip比如172.16.0.0/16也会被再次路由转发。
This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 5 days