首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头:如何让容器访问主机上的网桥?VPN-over

码头:如何让容器访问主机上的网桥?VPN-over
EN

Server Fault用户
提问于 2021-05-08 20:38:58
回答 1查看 5.1K关注 0票数 3

我正在尝试修改VPN上的VPN设置,我一直使用它来连接另一个VPN连接上的两个lan段,但是我遇到了一个路障,看起来应该有一个解决方案。

代码语言:javascript
复制
VLAN1 <-> USB-Ethernet adapter <-> [ tincd (Mode: switch) <-> openconnect ] <-> LAN <-> {internet} <-> tincd (remote) <-> VLAN1 (remote)

在没有停靠器容器的情况下,我的工作方式是将tincd本质上配置为连接到只有在建立openconnect时才能到达的IP地址。我有一个桥接器“vpn桥”,它连接USB以太网适配器和tincd守护进程,还有一个iptables规则,允许从网桥接受并转发到桥接器。这是很好的工作,设备可以看到和相互交谈,就像他们在同一个局域网。

所以我创造了一个码头容器。我让openconnect客户端在容器中运行,并成功地连接到远程网络,并且在容器中运行tincd守护进程,这意味着它能够在VPN之上建立VPN。因为我不希望对路由等的openconnect更改影响主机,所以我对该容器使用了vpcbr网络。

现在,在我的tinc-up脚本中,我告诉tincd将它创建的接口添加到桥接器中,其中包含USB以太网适配器,它允许它接受/转发流量。这是tinc-up脚本中的相关部分:

代码语言:javascript
复制
ifconfig "$INTERFACE" "0.0.0.0"
brctl addif vpn-bridge "$INTERFACE"
ifconfig "$INTERFACE" up
iptables -A FORWARD -i vpn-bridge -o vpn-bridge -j ACCEPT

直接在主机上这样做很容易,桥接器已经存在,桥接器已经与USB以太网适配器相连。但是在对接器容器中,这个桥并不存在,即使我创建了它,我也无法将它与USB以太网接口连接起来,而USB以太网接口不能从容器内部直接访问。我也不希望容器使用“主机”网络,因为我不希望openconnect路由更改影响主机上运行的其他东西。

我找不到一种方法将主机上的现有桥公开给码头容器,这样由tincd完成的brctl addif就可以工作了。有办法做到这点吗?或者这是ipvlan解决的问题吗?我很难找到ipvlan的例子,也很难找到一种将它们与docker编写一起使用的方法。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-05-09 16:44:04

在尝试了很多事情之后,我终于把它(主要是)工作了。事实证明,ipvlan不是正确的驱动程序,这可以用macvlanpassthru模式下完成。以下是我的对接者-Compose.yml的相关摘录:

代码语言:javascript
复制
networks:
  main:
    driver: bridge
    ipam:
      config:
        - subnet: 172.21.8.0/24
  vlan:
    driver: macvlan
    driver_opts:
      parent: eno1.9
      macvlan_mode: passthru
    ipam:
      config:
        - subnet: 172.21.9.0/24

我发现我的main网络必须在vlan之前按字母顺序命名,否则将端口映射到在容器中运行的其他守护进程无效。另外,特别是对于openconnect,我必须编写一个自定义脚本来过滤为拆分隧道而推入的地址范围,以排除172.16.0.0/12范围,这会导致在容器中运行的守护进程的连接在不经意间被路由。

另一个问题是,我不能使用,因为设备名enxAABBCCDDEEFF太长,无法添加vlan标记。我找不到一个单独的macvlan驱动程序选项来指定标记。最后,我只使用了主网络接口eno1并以这种方式标记了流量。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1062987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档