DHCP采用的是下载额外的DHCP服务器,然后通过mininet自带的host.defaultIntf.updateIP()函数进行IP地址的更新。
在进行DHCP的配置之前需要确保安装以下必要的可执行文件:
udhcpd, udhcpc, dnsmasq, curl, firefox。
具体的安装步骤可自行搜索。,如:
sudo apt update
sudo apt install dnsmasq isc-dhcp-client
可通过该命令来查询是否安装了某些可执行文件:
dnsmasq --version
dhclient --version
其中udhcpd的安装比较重要:
在Ubuntu中,udhcpd
是一个轻量级的DHCP服务器,可以使用以下命令来安装udhcpd
:
sudo apt update
sudo apt install udhcpd
安装完成后,您可以配置udhcpd
来提供DHCP服务。配置文件通常位于/etc/udhcpd.conf
,您可以根据需要对其进行编辑。配置完成后,您可以启动udhcpd
服务:
sudo service udhcpd start
可使用以下命令来停止、重启或查看udhcpd
的状态:
停止服务:sudo service udhcpd stop
重启服务:sudo service udhcpd restart
查看状态:sudo service udhcpd status
安装完成后进入DHCP的配置:!!!!!
DHCP的配置在我们的总拓扑里面 final.py中配置
1:地址池的设置
DNSTemplate = """
start #开始IP
end #结束IP
option subnet #子网掩码
option domain local
option lease 7 # seconds
"""
2:创建DHCP服务器.conf文件
def makeDHCPconfig( filename, intf, gw, dns ):
"Create a DHCP configuration file"
config = (
'interface %s' % intf,
DNSTemplate,
'option router %s' % gw,
'option dns %s' % dns,
'' )
with open( filename, 'w' ) as f:
f.write( '\n'.join( config ) )
3:启动DHCP服务器
def startDHCPserver( host, gw, dns ):
"Start DHCP server on host with specified DNS server"
info( '* Starting DHCP server on', host, 'at', host.IP(), '\n' )
dhcpConfig = '/tmp/%s-udhcpd.conf' % host
makeDHCPconfig( dhcpConfig, host.defaultIntf(), gw, dns )
host.cmd( 'udhcpd -f', dhcpConfig,
'1>/tmp/%s-dhcp.log 2>&1 &' % host )
4:启动请求方,并创建.log文件
def startDHCPclient( host ):
"Start DHCP client on host"
intf = host.defaultIntf()
host.cmd( 'dhclient -v -d -r', intf )
host.cmd( 'dhclient -v -d 1> /tmp/dhclient.log 2>&1', intf, '&' )
5:请求方等待IP地址,若失败则进行重复请求
def waitForIP( host ):
"Wait for an IP address"
info( '*', host, 'waiting for IP address' )
while True:
host.defaultIntf().updateIP()
if host.IP():
break
info( '.' )
sleep( 1 )
info( '\n' )
DHCP分配结束,使用python final.py命令之后等待一段时间,ip地址就自动分配完成!