您尚未登录。

#1 2020-08-13 12:12:26

unknowndev
会员
注册时间: 2020-08-13
帖子: 7

[求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

我的初始目的是想用它来代理用 bridge 联网的 docker 上容器的程序,就是这样

最开始在 cgproxy 的 issues 里得到了有效的答复,像下面那样

sudo sysctl -w net.bridge.bridge-nf-call-iptables=0
sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=0

是的,这么设置之后确实有效,但是因为一些原因(在 sysctl.d 写入这些值对应的配置文件用于开机时加载,但是 bridge 相关值设置需要加载模块,并且我不希望这个模块在我不使用的时候被加载)我需要一个不设置 net.bridge.bridge-nf-call-iptables=0 的方法来解决这个问题,但是我找不到有用的答案

这是 iptables -t raw -A PREROUTING -p udp -m udp --dport 53 -j TRACE 之后的部分 log
这是 nat 表里的规则

最近编辑记录 unknowndev (2020-08-13 12:30:49)

离线

#2 2020-08-13 12:39:25

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

原来 docker 还加载了这么一个奇怪的模块: https://github.com/moby/moby/pull/13162

你可以试试看 sysctl.d(5) 手册页 Example 2 的方案,使用 udev 在加载 br_netfilter 这个奇怪的模块时应用设置。

sysctl.d(5) 说:

       /etc/udev/rules.d/99-bridge.rules:

           ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \
                 RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/bridge"

       /etc/sysctl.d/bridge.conf:

           net.bridge.bridge-nf-call-ip6tables = 0
           net.bridge.bridge-nf-call-iptables = 0
           net.bridge.bridge-nf-call-arptables = 0

离线

#3 2020-08-13 12:48:30

unknowndev
会员
注册时间: 2020-08-13
帖子: 7

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

依云 说:

原来 docker 还加载了这么一个奇怪的模块: https://github.com/moby/moby/pull/13162

你可以试试看 sysctl.d(5) 手册页 Example 2 的方案,使用 udev 在加载 br_netfilter 这个奇怪的模块时应用设置。

sysctl.d(5) 说:

       /etc/udev/rules.d/99-bridge.rules:

           ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \
                 RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/bridge"

       /etc/sysctl.d/bridge.conf:

           net.bridge.bridge-nf-call-ip6tables = 0
           net.bridge.bridge-nf-call-iptables = 0
           net.bridge.bridge-nf-call-arptables = 0

目前可用的方法只有禁用它们了吗

离线

#4 2020-08-13 13:04:31

unknowndev
会员
注册时间: 2020-08-13
帖子: 7

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

今天试了一下设置 net.bridge.bridge-nf-call-iptables = 0,但是出现了容器内 tcp 超时的现象,systemd-nspawn 内也是如此
这是今天用 iptables 在 53/udp 80/tcp 443/tcp 看到的东西

离线

#5 2020-08-13 13:18:25

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

unknowndev 说:

但是出现了容器内 tcp 超时的现象,systemd-nspawn 内也是如此

离线

#6 2020-08-13 13:30:51

unknowndev
会员
注册时间: 2020-08-13
帖子: 7

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

依云 说:
unknowndev 说:

但是出现了容器内 tcp 超时的现象,systemd-nspawn 内也是如此

curl -vv4 google.com 可以解析出地址,但是等待一段时间会连接失败并提示超时

*   Trying 172.217.5.206:80...
* TCP_NODELAY set
* connect to 172.217.5.206 port 80 failed: Connection timed out
* Failed to connect to google.com port 80: Connection timed out
* Closing connection 0
curl: (7) Failed to connect to google.com port 80: Connection timed out

离线

#7 2020-08-13 14:25:12

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

你从国内访问 Google 美国的地址当然 timeout 啦。你照着 OUTPUT 链上的内容在 PREROUTING 链上也加上代理的设置就好了。

最近编辑记录 依云 (2020-08-13 14:26:28)

离线

#8 2020-08-13 14:25:54

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

离线

#9 2020-08-13 14:49:46

unknowndev
会员
注册时间: 2020-08-13
帖子: 7

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

依云 说:

你从国内访问 Google 美国的地址当然 timeout 啦。你照着 OUTPUT 链上的内容在 PREROUTING 链上也加上代理的设置就好了。

那可以说是 cgproxy 的自动设置少了 PREROUTING  链吗?

离线

#10 2020-08-13 15:14:25

unknowndev
会员
注册时间: 2020-08-13
帖子: 7

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

依云 说:

你从国内访问 Google 美国的地址当然 timeout 啦。你照着 OUTPUT 链上的内容在 PREROUTING 链上也加上代理的设置就好了。

现在 mangle 表里的规则是这样的,我是需要复制什么到 PREROUTING 链呢?

# Warning: iptables-legacy tables present, use iptables-legacy to see them
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N TPROXY_ENT
-N TPROXY_PRE
-N TPROXY_MARK
-N TPROXY_OUT
-A PREROUTING -j TPROXY_PRE
-A OUTPUT -j TPROXY_OUT
-A TPROXY_ENT -m socket -j MARK --set-xmark 0x9973/0xffffffff
-A TPROXY_ENT -m socket -j ACCEPT
-A TPROXY_ENT -p tcp -j TPROXY --on-port 12345 --on-ip 127.0.0.1 --tproxy-mark 0x9973/0xffffffff
-A TPROXY_ENT -p udp -j TPROXY --on-port 12345 --on-ip 127.0.0.1 --tproxy-mark 0x9973/0xffffffff
-A TPROXY_PRE -m addrtype --dst-type LOCAL -j RETURN
-A TPROXY_PRE -m addrtype ! --dst-type UNICAST -j RETURN
-A TPROXY_PRE -p udp -m udp --dport 53 -j TPROXY_ENT
-A TPROXY_PRE -p udp -j TPROXY_ENT
-A TPROXY_PRE -p tcp -j TPROXY_ENT
-A TPROXY_MARK -m addrtype ! --dst-type UNICAST -j RETURN
-A TPROXY_MARK -p udp -m udp --dport 53 -j MARK --set-xmark 0x9973/0xffffffff
-A TPROXY_MARK -p udp -j MARK --set-xmark 0x9973/0xffffffff
-A TPROXY_MARK -p tcp -j MARK --set-xmark 0x9973/0xffffffff
-A TPROXY_OUT -m conntrack --ctdir REPLY -j RETURN
-A TPROXY_OUT -m cgroup --path "/noproxy.slice" -j RETURN
-A TPROXY_OUT -m cgroup --path "/system.slice/system-v2ray.slice" -j RETURN
-A TPROXY_OUT -m cgroup --path "/proxy.slice" -j TPROXY_MARK
-A TPROXY_OUT -m cgroup --path "/system.slice/containerd.service" -j TPROXY_MARK
-A TPROXY_OUT -m cgroup --path "/system.slice/docker.service" -j TPROXY_MARK
-A TPROXY_OUT -m cgroup --path "/" -j TPROXY_MARK

离线

#11 2020-08-13 16:24:59

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

你能把你所有的 iptables 设置和 ip a 输出一起发出来吗?最主要是 nat 部分的。另外你把 legacy 的部分也发出来啊。

离线

#12 2020-08-14 14:52:26

unknowndev
会员
注册时间: 2020-08-13
帖子: 7

Re: [求助]cgproxy 代理 bridge 联网的 docker 时碰到的一些问题

依云 说:

你能把你所有的 iptables 设置和 ip a 输出一起发出来吗?最主要是 nat 部分的。另外你把 legacy 的部分也发出来啊。

legacy 里的规则只有类似 -P PREROUTING ACCEPT 的东西
这是 ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether x brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.13/24 brd 192.168.233.255 scope global dynamic noprefixroute enp0s3
       valid_lft 255923sec preferred_lft 255923sec
    inet6 fe80::15a:1bb:915:a1f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: nm-bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 56:75:5d:eb:c0:b5 brd ff:ff:ff:ff:ff:ff
    inet 10.42.0.1/24 brd 10.42.0.255 scope global noprefixroute nm-bridge
       valid_lft forever preferred_lft forever
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:2e:ca:ef:d5 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
7: vb-uuu@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master nm-bridge state UP group default qlen 1000
    link/ether 67 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::61d:71f:f1c:17/64 scope link 
       valid_lft forever preferred_lft forever

离线

页脚