页次: 1
我的初始目的是想用它来代理用 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)
离线
原来 docker 还加载了这么一个奇怪的模块: https://github.com/moby/moby/pull/13162
你可以试试看 sysctl.d(5) 手册页 Example 2 的方案,使用 udev 在加载 br_netfilter 这个奇怪的模块时应用设置。
/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
离线
原来 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
目前可用的方法只有禁用它们了吗
离线
今天试了一下设置 net.bridge.bridge-nf-call-iptables = 0,但是出现了容器内 tcp 超时的现象,systemd-nspawn 内也是如此
这是今天用 iptables 在 53/udp 80/tcp 443/tcp 看到的东西
离线
但是出现了容器内 tcp 超时的现象,systemd-nspawn 内也是如此
?
离线
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
离线
你从国内访问 Google 美国的地址当然 timeout 啦。你照着 OUTPUT 链上的内容在 PREROUTING 链上也加上代理的设置就好了。
最近编辑记录 依云 (2020-08-13 14:26:28)
离线
离线
你从国内访问 Google 美国的地址当然 timeout 啦。你照着 OUTPUT 链上的内容在 PREROUTING 链上也加上代理的设置就好了。
那可以说是 cgproxy 的自动设置少了 PREROUTING 链吗?
离线
你从国内访问 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
离线
你能把你所有的 iptables 设置和 ip a 输出一起发出来吗?最主要是 nat 部分的。另外你把 legacy 的部分也发出来啊。
离线
你能把你所有的 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
离线
页次: 1