V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dalaomai
V2EX  ›  Docker

求助: docker macvlan 如何配置?

  •  
  •   dalaomai · 2021-11-16 16:48:26 +08:00 · 1279 次点击
    这是一个创建于 1103 天前的主题,其中的信息可能已经有所发展或是发生改变。
    version: '3'
    
    services:
      openwrt:
        image: lede:test
        # ports:
        #  - "80:80"
        networks:
          - openwrt-WAN
          - openwrt-LAN
        privileged: true
    
    networks:
      openwrt-WAN:
        driver: macvlan
        driver_opts:
          parent: eth0
        ipam:
          config:
            - gateway: "192.168.2.1"
              subnet: "192.168.2.0/24"
    
    
      openwrt-LAN:
        driver: bridge
        internal: true
    

    想用 docker 来部署 openwrt ,按照上面的配置部署后,容器内成功获取 ip

    / # 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: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 02:42:ac:1d:00:02 brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.1/24 brd 192.168.10.255 scope global br-lan
           valid_lft forever preferred_lft forever
    100: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:c0:a8:02:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 192.168.2.192/24 brd 192.168.2.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:c0ff:fea8:202/64 scope link 
           valid_lft forever preferred_lft forever
    101: eth1@if102: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-lan state UP group default 
        link/ether 02:42:ac:1d:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    

    "192.168.2.0/24"的其它机器可以 ping 通容器 但是 http 和 ssh 都不行

    5 条回复    2021-11-16 20:41:50 +08:00
    Buges
        1
    Buges  
       2021-11-16 16:56:46 +08:00 via Android   ❤️ 1
    1. 不要这么做。openwrt 的 docker 镜像是用来开发测试的,不是正常运行的,你会很快遇到权限错误、内核模块不匹配等问题。
    2.macvlan 和的子接口和主接口无法直接通讯。其他设备能 ping 通但无法通信的话,检查防火墙和是否绑定到了相应的接口上。
    dalaomai
        2
    dalaomai  
    OP
       2021-11-16 17:09:04 +08:00
    @Buges 感谢回复。对于 1:我其实是想实现其它容器有一个统一的全局代理,没想到其它方案; 2:openwrt 的防火墙已关,我理解如果绑定错接口应该 ping 不通吧
    Buges
        3
    Buges  
       2021-11-16 17:15:08 +08:00 via Android   ❤️ 1
    @dalaomai 1. 容器是通过宿主机访问网络的,你应该在宿主机上设置全局代理,或者按 wireguard 推荐的方式,创建相应的 tun 然后移动到容器的 namespace 里。需要注意 tproxy 与 docker 网络栈有所冲突。
    2.绑定对应的接口指的是你的应用 bind to the network interface which is reachable ,比如为了安全起见很多程序默认不会绑定到 wan interface 。
    dalaomai
        4
    dalaomai  
    OP
       2021-11-16 17:43:00 +08:00
    @Buges 获益良多,感谢
    test0x01
        5
    test0x01  
       2021-11-16 20:41:50 +08:00 via Android
    我一直用这种方式提供旁路由的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2835 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:25 · PVG 21:25 · LAX 05:25 · JFK 08:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.