首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >伪装docker接口和主机接口

伪装docker接口和主机接口
EN

Stack Overflow用户
提问于 2021-04-23 14:18:06
回答 1查看 117关注 0票数 0

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

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

如果TUN接口不在docker中,我会这样做:

代码语言:javascript
运行
复制
sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE

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

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-04 20:03:09

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

因此,假设网络名为proxy_net,则其docker接口为proxy_net0,其网关为192.168.1.254

在容器内部:

代码语言:javascript
运行
复制
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

在主机上:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67224864

复制
相关文章

相似问题

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