V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SunriseFox
V2EX  ›  问与答

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

  •  
  •   SunriseFox · 2020-03-02 10:14:45 +08:00 · 1735 次点击
    这是一个创建于 1710 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统是 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

    3 条回复    2020-03-31 21:43:57 +08:00
    limstash
        1
    limstash  
       2020-03-27 14:47:11 +08:00
    遇到了同样的问题...
    SunriseFox
        2
    SunriseFox  
    OP
       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
        3
    limstash  
       2020-03-31 21:43:57 +08:00   ❤️ 1
    @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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5670 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:38 · PVG 11:38 · LAX 19:38 · JFK 22:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.