V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
SunriseFox
V2EX  ›  问与答

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

  •  
  •   SunriseFox · Mar 2, 2020 · 2339 views
    This topic created in 2255 days ago, the information mentioned may be changed or developed.

    系统是 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 replies    2020-03-31 21:43:57 +08:00
    limstash
        1
    limstash  
       Mar 27, 2020
    遇到了同样的问题...
    SunriseFox
        2
    SunriseFox  
    OP
       Mar 27, 2020
    @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  
       Mar 31, 2020   ❤️ 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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1041 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:34 · PVG 01:34 · LAX 10:34 · JFK 13:34
    ♥ Do have faith in what you're doing.