docker--DHCP服务器

1、使用的镜像

sudo docker pull networkboot/dhcpd

2、测试的局域网拓扑结构如下:h为 DHCP服务器,ovs交换机s1、s2、s3各连着一台等待分配ip地址的主机。

3、h DHCP服务器通过一对暴露于root namespace 的veth pair相连,具体操作如下

   3.1、生成交换机s1、s2、s3

sudo ovs-vsctl add-br s1
sudo ovs-vsctl add-br s2
sudo ovs-vsctl add-br s3

   3.2、创建veth pair  即 v1-v2

sudo ip link add v1 type veth peer name v2

    3.3、激活up

sudo ip link set dev v1 up
sudo ip link set dev v2 up

   3.4、给v1配置ip及子网掩码

sudo ifconfig v1 192.168.1.254 netmask 255.255.255.0

   3.5、生成DHCP服务器,监听v1 ,挂载本地data文件夹,data里面中只有dhcpd.conf文件  

sudo docker run -it \
--rm --net host \
--init \
--name=dhcpServer1 \
-v ~/emxbook/docker-dhcpd/data:/data \
networkboot/dhcpd v1

   dhcpd.conf

subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name "emx.local";
option domain-name-servers 8.8.8.8;
range 192.168.1.2 192.168.1.100;
}

  3.5、将v2连接到交换机上

sudo ovs-vsctl add-port s1 v2

  3.6、交换机s1、s2、s3彼此相连

sudo ovs-vsctl add-port s1 s1p1
sudo ovs-vsctl set Interface s1p1 type=patch
sudo ovs-vsctl set Interface s1p1 options:peer=s2p1
sudo ovs-vsctl add-port s2 s2p1
sudo ovs-vsctl set Interface s2p1 type=patch
sudo ovs-vsctl set Interface s2p1 options:peer=s1p1
sudo ovs-vsctl add-port s1 s1p2
sudo ovs-vsctl set Interface s1p2 type=patch
sudo ovs-vsctl set Interface s1p2 options:peer=s3p1
sudo ovs-vsctl add-port s3 s3p1
sudo ovs-vsctl set Interface s3p1 type=patch
sudo ovs-vsctl set Interface s3p1 options:peer=s1p2

  3.7、创建主机h1、h2、h3,并将其连接到交换机上,其中ubunut:5是添加了基本net-tools、isc-dhcp-client,创建的时候记得使用     --cap-add=NET_ADMIN

sudo docker run -itd --network=none --name=h1 --cap-add=NET_ADMIN ubuntu:5
sudo docker run -itd --network=none --name=h2 --cap-add=NET_ADMIN ubuntu:5
sudo docker run -itd --network=none --name=h3 --cap-add=NET_ADMIN ubuntu:5
sudo ovs-docker add-port s1 eth1 h1
sudo ovs-docker add-port s2 eth1 h2
sudo ovs-docker add-port s3 eth1 h3

   3.8、可以使用floot-light控制交换机s1、s2、s3交换机(选择)

sudo ovs-vsctl set-controller s1 tcp:127.0.0.1:6653
sudo ovs-vsctl set-controller s2 tcp:127.0.0.1:6653
sudo ovs-vsctl set-controller s3 tcp:127.0.0.1:6653

4、使用dhclient eht1 向DHCP服务器申请

   4.1、申请ip之前

   

 

  4.2、申请ip(服务器端界面)

  

 

  4.3申请ip之后,h1(192.168.1.38):

  

  同理,h2(192.168.1.39):

  

  h3(192.168.1.40):

  

5、测试

   5.1、h1 ping h2(192.168.1.39):

   

   5.2、h2 ping h3(192.168.1.40):

      

6、最后拓扑结构图,ip分配之后的拓扑结构:DHCP服务器(192.168.1.6)、h1(192.168.1.38)、h2(192.168.1.39)、h3(192.168.1.40)

   

7、代码汇总参考

sudo ovs-vsctl add-br s1
sudo ovs-vsctl add-br s2
sudo ovs-vsctl add-br s3
sudo ip link add v1 type veth peer name v2
sudo ip link set dev v1 up
sudo ip link set dev v2 up
sudo ifconfig v1 192.168.1.6 netmask 255.255.255.0
sudo docker run -it \
--rm --net host \
--init \
--name=dhcpServer \
-v ~/emxbook/docker-dhcpd/data:/data \
networkboot/dhcpd v1
sudo ovs-vsctl add-port s1 v2
sudo ovs-vsctl add-port s1 s1p1
sudo ovs-vsctl set Interface s1p1 type=patch
sudo ovs-vsctl set Interface s1p1 options:peer=s2p1
sudo ovs-vsctl add-port s2 s2p1
sudo ovs-vsctl set Interface s2p1 type=patch
sudo ovs-vsctl set Interface s2p1 options:peer=s1p1
sudo ovs-vsctl add-port s1 s1p2
sudo ovs-vsctl set Interface s1p2 type=patch
sudo ovs-vsctl set Interface s1p2 options:peer=s3p1
sudo ovs-vsctl add-port s3 s3p1
sudo ovs-vsctl set Interface s3p1 type=patch
sudo ovs-vsctl set Interface s3p1 options:peer=s1p2
sudo docker run -itd --network=none --name=h1 --cap-add=NET_ADMIN ubuntu:5
sudo docker run -itd --network=none --name=h2 --cap-add=NET_ADMIN ubuntu:5
sudo docker run -itd --network=none --name=h3 --cap-add=NET_ADMIN ubuntu:5
sudo ovs-docker add-port s1 eth1 h1
sudo ovs-docker add-port s2 eth1 h2
sudo ovs-docker add-port s3 eth1 h3
sudo ovs-vsctl set-controller s1 tcp:127.0.0.1:6653
sudo ovs-vsctl set-controller s2 tcp:127.0.0.1:6653
sudo ovs-vsctl set-controller s3 tcp:127.0.0.1:6653

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用 Docker 实现 DHCP(Dynamic Host Configuration Protocol)可以帮助您快速搭建一个 DHCP 服务器,并管理网络中的 IP 地址分配。下面是一个简单的使用 Docker 实现 DHCP 的例子: 1. 编写 Dockerfile 首先,需要编写一个 Dockerfile 文件,用于描述如何构建 DHCP 服务器镜像。例如: ``` # 使用 Ubuntu 18.04 作为基础镜像 FROM ubuntu:18.04 # 更新软件包列表并安装 DHCP 服务器 RUN apt-get update && apt-get install -y isc-dhcp-server # 复制 DHCP 服务器配置文件到容器中 COPY dhcpd.conf /etc/dhcp/dhcpd.conf # 启动 DHCP 服务器 CMD ["/usr/sbin/dhcpd", "-f", "-d", "--no-pid"] ``` 其中,`dhcpd.conf` 是 DHCP 服务器的配置文件,需要根据实际需求进行修改。 2. 构建镜像 使用以下命令构建镜像: ``` docker build -t my-dhcp-server . ``` 其中,`-t` 指定镜像名称。 3. 运行容器 使用以下命令运行容器: ``` docker run -d --name dhcp-server --net=host --cap-add=NET_ADMIN my-dhcp-server ``` 其中,`--name` 指定容器名称,`--net=host` 指定容器使用主机网络,`--cap-add=NET_ADMIN` 允许容器进行网络管理操作。 4. 配置 DHCP 服务器 修改 `dhcpd.conf` 文件,配置 DHCP 服务器的 IP 地址池、网关、DNS 等参数。例如: ``` subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.50; option routers 192.168.1.1; option domain-name-servers 8.8.8.8, 8.8.4.4; } ``` 其中,`subnet` 指定 IP 地址池所在的子网,`range` 指定 IP 地址池的起始和结束地址,`option routers` 指定网关地址,`option domain-name-servers` 指定 DNS 服务器地址。 5. 重启 DHCP 服务器 使用以下命令重启 DHCP 服务器: ``` docker restart dhcp-server ``` 现在,您可以在网络中的其他设备上进行 DHCP 请求,并获得分配的 IP 地址了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值