xiaorouji / openwrt-passwall

7.01k stars 2.62k forks source link

[Bug]: 旁路由中安装的docker无法联网 #3209

Closed pianranjinghong closed 4 months ago

pianranjinghong commented 4 months ago

描述您遇到的bug

从4.77-4开始,旁路由中的docker容器无法联网,看了一下,在355a741改动中,luci-app-passwall/root/usr/share/passwall/nftables.sh文件中删除了

nft "add rule inet fw4 PSW_MANGLE ip protocol udp udp dport 53 counter return"
nft "add rule inet fw4 PSW_MANGLE_V6 meta l4proto udp udp dport 53 counter return"

我在本地文件中加入了这两句后,docker就可以上网了。

复现此Bug的步骤

防火墙部分配置 ` config defaults option input 'REJECT' option output 'ACCEPT' option forward 'REJECT' option flow_offloading '1' option flow_offloading_hw '1' option fullcone '1' option synflood_protect '1'

config zone option name 'lan' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' list network 'lan' list network 'lan6'

config zone option name 'wan' list network 'wan' list network 'wan6' option input 'REJECT' option output 'ACCEPT' option forward 'REJECT' option masq '1' option mtu_fix '1'

config forwarding option src 'lan' option dest 'wan'

config rule option name 'Allow-DHCP-Renew' option src 'wan' option proto 'udp' option dest_port '68' option target 'ACCEPT' option family 'ipv4'

config rule option name 'Allow-Ping' option src 'wan' option proto 'icmp' option icmp_type 'echo-request' option family 'ipv4' option target 'ACCEPT'

config rule option name 'Allow-IGMP' option src 'wan' option proto 'igmp' option family 'ipv4' option target 'ACCEPT'

config rule option name 'Allow-DHCPv6' option src 'wan' option proto 'udp' option dest_port '546' option family 'ipv6' option target 'ACCEPT'

config rule option name 'Allow-MLD' option src 'wan' option proto 'icmp' option src_ip 'fe80::/10' list icmp_type '130/0' list icmp_type '131/0' list icmp_type '132/0' list icmp_type '143/0' option family 'ipv6' option target 'ACCEPT'

config rule option name 'Allow-ICMPv6-Input' option src 'wan' option proto 'icmp' list icmp_type 'echo-request' list icmp_type 'echo-reply' list icmp_type 'destination-unreachable' list icmp_type 'packet-too-big' list icmp_type 'time-exceeded' list icmp_type 'bad-header' list icmp_type 'unknown-header-type' list icmp_type 'router-solicitation' list icmp_type 'neighbour-solicitation' list icmp_type 'router-advertisement' list icmp_type 'neighbour-advertisement' option limit '1000/sec' option family 'ipv6' option target 'ACCEPT'

config rule option name 'Allow-ICMPv6-Forward' option src 'wan' option dest '*' option proto 'icmp' list icmp_type 'echo-request' list icmp_type 'echo-reply' list icmp_type 'destination-unreachable' list icmp_type 'packet-too-big' list icmp_type 'time-exceeded' list icmp_type 'bad-header' list icmp_type 'unknown-header-type' option limit '1000/sec' option family 'ipv6' option target 'ACCEPT'

config rule option name 'Allow-IPSec-ESP' option src 'wan' option dest 'lan' option proto 'esp' option target 'ACCEPT'

config rule option name 'Allow-ISAKMP' option src 'wan' option dest 'lan' option dest_port '500' option proto 'udp' option target 'ACCEPT'

config zone 'docker' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' option name 'docker' list network 'docker'

config redirect option dest 'docker' option target 'DNAT' option name 'qinglong' option src 'wan' option src_dport '5705' option dest_port '5705' option family 'any' option enabled '0'

config forwarding option src 'docker' option dest 'lan'

config forwarding option src 'lan' option dest 'docker'

config include 'unblockneteasemusic' option type 'nftables' option path '/var/run/unblockneteasemusic/fw4.nft' option position 'table-post'

config include 'passwall' option type 'script' option path '/var/etc/passwall.include' option reload '1'

config include 'passwall_server' option type 'script' option path '/var/etc/passwall_server.include' option reload '1'

config include 'passwall2' option type 'script' option path '/var/etc/passwall2.include' option reload '1'

config include 'passwall2_server' option type 'script' option path '/var/etc/passwall2_server.include' option reload '1'

`

您想要实现的目的

docker可以联网

日志信息

截图

No response

系统相关信息

平台:X86 内核:6.1.89 系统:immortalwrt master passwall:4.77-4

其他信息

No response

sbwml commented 4 months ago

理论上来讲,自 OpenWrt 22.03 使用 fw4 开始,你在官方原生镜像中安装 dockerd 后,即使不安装 passwall,它默认docker桥接网络模式(docker0)就无法联网,除非使用 Host 网络模式。因为它默认不会添加 docker 区域 ⇒ 转发 wan 防火墙规则,同时 dockerd 会 blocked_interfaces wan。

各种迹象来看,这是 OpenWrt 刻意为之。我相信这不是 passwall 或其它插件需要去干预的问题。

打破这种默认值最优的方式应该是 patch dockerd 软件包后去编译dockerd,以 OpenWrt 21 或之前版本的形式为 dockerd 提供可用的桥接网络。

pianranjinghong commented 4 months ago

理论上来讲,自 OpenWrt 22.03 使用 fw4 开始,你在官方原生镜像中安装 dockerd 后,即使不安装 passwall,它默认docker桥接网络模式(docker0)就无法联网,除非使用 Host 网络模式。因为它默认不会添加 docker 区域 ⇒ 转发 wan 防火墙规则,同时 dockerd 会 blocked_interfaces wan。

各种迹象来看,这是 OpenWrt 刻意为之。我相信这不是 passwall 或其它插件需要去干预的问题。

打破这种默认值最优的方式应该是 patch dockerd 软件包后去编译dockerd,以 OpenWrt 21 或之前版本的形式为 dockerd 提供可用的桥接网络。

了解了,谢谢