sing-box icon indicating copy to clipboard operation
sing-box copied to clipboard

对外提供nginx服务的服务器主机,使用singbox后,对外服务会无法连接

Open wiselike opened this issue 1 year ago • 2 comments

操作系统

Linux

系统版本

Ubuntu22.04

安装类型

sing-box 原始命令行程序

如果您使用图形客户端程序,请提供该程序版本。

No response

版本

1.9.4

描述

服务器主机内的网络结构:

  1. 服务器主机只有单物理网卡eth0;
  2. nginx是容器服务,运行在docker内,使用的是docker的bridge网卡,docker配置端口映射443,对外提供服务。
  3. singbox,直接在主机上命令行方式运行,并开启tun网卡;

故障现象与分析:

  1. 启动singbox后,外网访问nginx服务,就无法连接。使用tcpdump抓包eth0网卡,有入包,但没有出包;关闭停用singbox后,nginx对外服务恢复。
  2. 启动singbox后,外网访问nginx服务,就无法连接。使用tcpdump抓包tun网卡,无入包也无出包。
  3. 启动singbox后,进入nginx容器,使用ping、curl均能访问国内、国外外网。

重现方式

详见描述

日志

No response

支持我们

完整性要求

  • [X] 我保证阅读了文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
  • [X] 我保证提供了可以在本地重现该问题的服务器、客户端配置文件与流程,而不是一个脱敏的复杂客户端配置文件。
  • [X] 我保证提供了可用于重现我报告的错误的最简配置,而不是依赖远程服务器、TUN、图形界面客户端或者其他闭源软件。
  • [X] 我保证提供了完整的配置文件与日志,而不是出于对自身智力的自信而仅提供了部分认为有用的部分。

wiselike avatar Sep 05 '24 09:09 wiselike

再次排查了一下,确定了是只有eth0有入包,然后包是在tun网卡上被丢掉的,根本没进到容器服务里。

有一个解决方案,现在临时规避了,tun添加配置:"exclude_interface": "nginx"。让sing-box设置排除nginx的容器所在的网卡。这样sing-box会自动在ip rule里添加一条路由规则,到nginx网卡的包不走tun。 这样只有nginx网卡不能访问外网,用其他的虚拟网卡则不受影响可以走tun,从而访问外网。

hengwu0 avatar Sep 05 '24 14:09 hengwu0

这个故障应该是ip_is_private不起作用引起的,本地ip比如172.16.0.0/16也会被再次路由转发。

hengwu0 avatar Sep 05 '24 14:09 hengwu0

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

github-actions[bot] avatar Nov 05 '24 01:11 github-actions[bot]