求助: docker macvlan 如何配置?

2021-11-16 16:48:26 +08:00
 dalaomai
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 都不行

1102 次点击
所在节点    Docker
5 条回复
Buges
2021-11-16 16:56:46 +08:00
1. 不要这么做。openwrt 的 docker 镜像是用来开发测试的,不是正常运行的,你会很快遇到权限错误、内核模块不匹配等问题。
2.macvlan 和的子接口和主接口无法直接通讯。其他设备能 ping 通但无法通信的话,检查防火墙和是否绑定到了相应的接口上。
dalaomai
2021-11-16 17:09:04 +08:00
@Buges 感谢回复。对于 1:我其实是想实现其它容器有一个统一的全局代理,没想到其它方案; 2:openwrt 的防火墙已关,我理解如果绑定错接口应该 ping 不通吧
Buges
2021-11-16 17:15:08 +08:00
@dalaomai 1. 容器是通过宿主机访问网络的,你应该在宿主机上设置全局代理,或者按 wireguard 推荐的方式,创建相应的 tun 然后移动到容器的 namespace 里。需要注意 tproxy 与 docker 网络栈有所冲突。
2.绑定对应的接口指的是你的应用 bind to the network interface which is reachable ,比如为了安全起见很多程序默认不会绑定到 wan interface 。
dalaomai
2021-11-16 17:43:00 +08:00
@Buges 获益良多,感谢
test0x01
2021-11-16 20:41:50 +08:00
我一直用这种方式提供旁路由的

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

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

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

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

© 2021 V2EX