【问题标题】:Masquerading docker interface and host interface伪装docker接口和主机接口
【发布时间】:2021-07-17 08:40:14
【问题描述】:

我在主机上运行 docker,我想将 docker 内的特定接口(TUN 接口)连接到主机的外部网络。

在 docker 内运行 ifconfig 时,我看到 3 个接口:eth0lomy_tun(tun 接口)。 在主机上,我看到lodocker0enp7s0(外网)。 我寻求的结果是,在my_tun 接口上发送的数据包将被发送到enp7s0

如果 TUN 接口不在 docker 中,我会执行以下操作:

sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE

所以我的问题是如何使用属于 docker 容器(最好在 Ubuntu 上)的 TUN 接口来做到这一点。

提前致谢!

【问题讨论】:

    标签: linux docker docker-networking tun masquerade


    【解决方案1】:

    我最后用中间网络解决了这个问题。 我创建了一个桥接类型的 docker 网络并将其连接到容器和主机。然后我使用容器内的 iptables 规则将通信从 tun 设备转发到网络,并在主机上使用类似规则将通信从网络转发到外部接口。

    所以假设网络名为proxy_net,其docker接口为proxy_net0,其网关为192.168.1.254

    容器内:

    iptables -A FORWARD -i my_tun -o proxy_net0 -j ACCEPT
    iptables -A FORWARD -i proxy_net0 -o my_tun -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A POSTROUTING -t nat -o proxy_net0 -j MASQUERADE
    ip route replace default via 192.168.1.254 dev proxy_net0
    

    在主机上:

    sudo iptables -A FORWARD -i proxy_net -o enp7s0 -j ACCEPT
    sudo iptables -A FORWARD -i enp7s0-o proxy_net -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -A POSTROUTING -t nat -o enp7s0 -j MASQUERADE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多