ubuntu 配置透明代理后,主机访问正常,主机上的 Docker 无法访问网络

2020-03-02 10:14:45 +08:00
 SunriseFox

系统是 clean install 的 kubuntu 18.04

按照 v2fly 教程配置,执行的指令如下:

sysctl net.ipv4.ip_forward = 1

ip rule add fwmark 1 table 100 
ip route add local 0.0.0.0/0 dev lo table 100

iptables -t mangle -N RULE
iptables -t mangle -A RULE -d 127.0.0.1/32 -j RETURN
iptables -t mangle -A RULE -d 224.0.0.0/4 -j RETURN 
iptables -t mangle -A RULE -d 172.17.0.0/16 -j RETURN # Docker
iptables -t mangle -A RULE -d 255.255.255.255/32 -j RETURN 
iptables -t mangle -A RULE -d 192.168.0.0/16 -p tcp -j RETURN
iptables -t mangle -A RULE -d 192.168.0.0/16 -p udp ! --dport 53 -j RETURN
iptables -t mangle -A RULE -p udp -j TPROXY --on-port 12345 --tproxy-mark 1
iptables -t mangle -A RULE -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1
iptables -t mangle -A PREROUTING -j RULE

iptables -t mangle -N RULE_MASK 
iptables -t mangle -A RULE_MASK -d 224.0.0.0/4 -j RETURN 
iptables -t mangle -A RULE_MASK -d 255.255.255.255/32 -j RETURN 
iptables -t mangle -A RULE_MASK -d 172.17.0.0/16 -j RETURN #Docker
iptables -t mangle -A RULE_MASK -d 192.168.0.0/16 -p tcp -j RETURN
iptables -t mangle -A RULE_MASK -d 192.168.0.0/16 -p udp ! --dport 53 -j RETURN
iptables -t mangle -A RULE_MASK -j RETURN -m mark --mark 0xff
iptables -t mangle -A RULE_MASK -p udp -j MARK --set-mark 1
iptables -t mangle -A RULE_MASK -p tcp -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -j RULE_MASK

配置后主机访问正常但是 Docker (network=bridge / network=host) 均完全无法连接网络,撤销 iptables 修改后恢复正常。尝试用 -j TRACE 发现 docker 发的包的路径和主机发的包的路径完全一致。

感谢大佬指教 0w0

1639 次点击
所在节点    问与答
3 条回复
limstash
2020-03-27 14:47:11 +08:00
遇到了同样的问题...
SunriseFox
2020-03-27 15:09:55 +08:00
@limstash 我之后就莫名其妙地好了,可以试试...

执行过这些指令

// 注意这个没持久化重启就没了... 可以手动写个文件什么的
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv4.conf.<网卡名 比如 eth0>.rp_filter=2
sysctl net.ipv4.conf.lo.rp_filter=0



/etc/systemd/system/multi-user.target.wants/docker.service

里面的 exec 在 docker 启动参数后面加

--iptables=false

然后重新应用 iptables 规则
limstash
2020-03-31 21:43:57 +08:00
@SunriseFox 后来我发现是因为 docker 的数据包在 nat:postrouting 才转换 src,在进入 mangle:prerouting 时 src 还是 172.17.0.0/16 网段的,然后就不知道怎么被 v2ray 丢了

我加了一条
iptables -t mangle -A V2RAY -s 172.17.0.0/16 -j RETURN

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/649019

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX