docker直连物理网络


简介

docker的使用都是基于端口映射进行使用的,但是作为实际中,我们需要直接对docker分配物理网络中的ip会更方便
直接用交换机和路由器对其进行管理

解决方法

在docker中,提供了ipvlan和macvlan两种方式可以达成这个目的,同时还可以支持ipv6
缺点是无法容器无法dhcp来获得ip,只能自己定义ip范围。且多个机子得自己指定network中分配的ip段
同时同一个物理网卡中ipvlan和macvlan不能同时存在,会报device or resource busy

环境

ubuntu20.04-5.4.0-91
docker-ce:19.03.14

ipvlan

可以获得物理ip,但是由于没有mac地址,所以在交换机显示的还是物理网卡的mac地址
subnet,gateway,ip-range,parent根据自己实际情况进行更改
ipvlan_mode有两种,l2是二层交换机,l3是三层交换机,根据自己需求来使用,一般应该l2就可以满足了
参考链接

docker network  create -d ipvlan --subnet=10.1.8.0/25 --gateway=10.1.8.1 -o ipvlan_mode=l2 --ip-range=10.1.8.49/30 -o parent=ens192 ipvlan

使用方法

docker run --net=ipvlan -itd nginx

macvlan

多了一个mac地址,其他的和ipvlan基本上没有区别
macvlan_mode有bridge,passthru,private,VEPA
正常推荐直接默认的bridge
参考链接

docker network create -d macvlan --subnet=10.1.8.0/25 --ip-range=10.1.8.19/30 --gateway=10.1.8.1 -o macvlan_mode=bridge -o parent=ens192 macvlan

使用方法

docker run --net=macvlan -itd nginx

小记

在使用macvlan的情况下需要开启内核转发
/etc/sysctl.conf

net.ipv4.ip_forward = 1

临时

sysctl -w net.ipv4.ip_forward=1

所以如果自己内网构建的话对mac地址无需求的情况下直接选ipvlan吧
出现网络不可达的情况下可能需要通过iptables进行放开

iptables -I DOCKER -d 10.1.8.1/8 -j ACCEPT

思考

如果两台机子,同时使用一个分配的段,会是什么结果

A 10.1.8.3
B 10.1.8.4

docker run --net=ipvlan -itd nginx

这时候两台nginx都是10.1.8.48

在A上面

root@53579423823f:/usr/share/nginx/html# echo 1 > index.html
root@53579423823f:/usr/share/nginx/html# exit
exit

curl 10.1.8.48                                                                             
2

在B上面

root@c989601b4464:/# echo 2 > /usr/share/nginx/html/index.html
root@c989601b4464:/# exit
exit

curl 10.1.8.48                                                                             
1

实验多次都是这个结果,好家伙,兔子不吃窝边草,专门挑别人家的。很值得学习
此时,如果是外面的机子访问,会有什么情况呢?

PING 10.1.8.48 (10.1.8.48) 56(84) bytes of data.
64 bytes from 10.1.8.48: icmp_seq=1 ttl=63 time=0.486 ms
64 bytes from 10.1.8.48: icmp_seq=2 ttl=63 time=0.757 ms
^C

curl 10.1.8.48
1

我们调换创建的顺序发现和创建的时间有关,不过这可以算一个同ip的负载均衡的解决方法。感觉这儿可以有点思考的空间


文章作者: xyzz
文章链接: http://www.xyzzpwn.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xyzz !
 上一篇
oh-my-zsh在git目录卡顿的问题 oh-my-zsh在git目录卡顿的问题
简介oh-my-zsh使用默认插件的时候在遇到git目录,每次都会执行git status,所以在大型git项目或者远程的git目录中就会特别卡顿。通过搜索发现还是直接去了最简单 解决方法git config oh-my-zsh.hide-
2021-12-27
下一篇 
逆向工具的整理 逆向工具的整理
简介对于逆向工具的整理一下下,预测不断更新总是忘记啥工具的名字很头疼 PE查信息 peid Exeinfo PE 逆向工具 ida pro ghidra dnspy 动态调试 ollydbg 插件ollydump 16进制编辑器 0
2021-12-22
  目录