案例模拟
目的一、服务器端能为内部客户机pc1,分配ip(手动分配,自动分配)
目的二、服务器端能为外部客户机pc2,分配ip
一、命令行
1、服务器端为内部客户机分配IP
操作准备
1、模拟服务端,安装dhcp-server服务
2、模拟内部客户机端
准备2块网卡都连接到服务器端
设置
1、服务器端
设置网卡信息,配置IP地址
进入到dhcp配置文件中 /etc/dhcp 下
修改dhcp.conf
将模板文件拷贝覆盖到当前文件下
修改 dhcpd.conf 配置文件
将无用的进行注释
修改 dhcp配置
绑定ip,要获取内部pc1网卡的MAC地址
重启dhcpd服务
结果
自动获取ip
2、服务器端为外部客户机分配ip
操作准备
服务端、中继器(路由)、外部pc2
中继端的一块网卡与服务器相连,另一块与外部pc2相连
1、中继器(路由)设置
安装dhcp服务
打开中继转发,将另一网段的广播,转发至服务器端
打开路由功能
2、服务器端设置
设置另一网段的ip分配设置
设置网关
结果
二、脚本编写
1、 配置基本信息
#!/bin/bash
#关闭相关命令
systemctl disable --now firewalld
iptables -F
setenforce 0
#获取ip相关配置
ens_nub=$(ip a | awk -F":"" " '/ens/ {print $2}' | grep -v '^$')
ifcfg_ens="/etc/sysconfig/network-scripts/ifcfg"
# 网卡名称
while true;do
echo -e "本机可使用网卡有:\n${ens_nub}"
read -p "请输入要配置网卡名称:" nub
if ! echo "$ens_nub" |grep -qw "$nub";then
echo "输入错误,请输入正确的网卡名称"
continue
else
break
fi
done
#网卡连接方式
read -p "选择配置网络的方式(dhcp|static):" n
case $n in
dhcp)
echo "TYPE=Ethernet
BOOTPROTO=dhcp
NAME=$nub
DEVICE=$nub
ONBOOT=yes" > "$ifcfg_ens"-"$nub"
echo "配置文件已生成在"$ifcfg_ens"-"$nub""
exit 0
;;
static)
# ip 地址
while true;do
read -p "请输入需要配置的ip地址:" ip_ip
a=$(echo $ip_ip | awk -F "." '!(NF==4 && $1>0 && $1<255 && $2>0 && $2<255 && $3>0 && $3<255 &&$4>0 && $4<255){print "无效ip"}')
if ! [[ -z "$a" ]];then
echo "无效ip,请重新输入"
continue
else
break
fi
done
# 子网掩码
while true;do
read -p "请输入ip地址的子网掩码(点分十进制):" mask
b=$(echo $mask | awk -F "." '!(NF==4 && $1>=0 && $1<=255 && $2>=0 && $2<=255 && $3>=0 && $3<=255 && $4>=0 && $4<=255){print "无效mask"}')
if ! [[ -z "$b" ]];then
echo "无效子网掩码,请重新输入"
continue
else
break
fi
done
#网关
while true;do
read -p "请输入需配置的网关:" gw
c=$(echo $gw | awk -F "." '!(NF==4 && $1>0 && $1<255 && $2>0 && $2<255 && $3>0 && $3<255 &&$4>0 && $4<255){print "无效网关"}')
if ! [[ -z "$c" ]];then
echo "无效网关,请重新输入"
continue
else
break
fi
done
#域名
while true;do
read -p "请输入需要配置的域名:" dns
d=$(echo $dns | awk -F "." '!(NF==4 && $1>0 && $1<255 && $2>0 && $2<255 && $3>0 && $3<255 &&$4>0 && $4<255){print "无效dns"}')
if ! [[ -z "$d" ]];then
echo "无效DNS,请重新输入"
continue
else
break
fi
done
echo "TYPE=Ethernet
BOOTPROTO=static
NAME=$nub
DEVICE=$nub
ONBOOT=yes
IPADDR=$ip_ip
NETMASK=$mask
GATEWAY=$gw
DNS1=$dns" > "$ifcfg_ens"-"$nub"
echo "配置文件已生成在"$ifcfg_ens"-"$nub""
;;
esac
2、配置dhcp
#!/bin/bash
config_dhcp(){
echo "subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.2 192.168.100.253;
option domain-name-servers 192.168.100.1;
option domain-name "internal.example.org";
option routers 192.168.100.254;
option broadcast-address 192.168.100.255;
default-lease-time 600;
max-lease-time 7200;
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address 192.168.100.100;
}"> /etc/dhcp/dhcpd.conf
systemctl enable --now dhcpd
}
cat <<EOF
1、配置dhcpd
2、路由配置
3、中继转发
EOF
read -p "请输入选项:" n
case $n in
#hdcpd配置
1)
rpm -q dhcp-server >>/dev/null
if [[ $? -eq 0 ]]
then
config_dhcp
else
yum install -y dhcp >>/dev/null
config_dhcp
fi
;;
#路由配置
2)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "已开启路由功能"
sysctl -p
;;
#中继转发
3)
while true;do
read -p "请输入需要配置的ip地址:" ip_d
a=$(echo $ip_d | awk -F "." '!(NF==4 && $1>0 && $1<255 && $2>0 && $2<255 && $3>0 && $3<255 &&$4>0 && $4<255){print "无效ip"}')
if ! [[ -z "$a" ]];then
echo "无效ip,请重新输入"
continue
else
break
fi
done
if ! rpm -q dhcp
then
echo "dhcrelay $ip_d"
else
yum install -y dhcp
echo "dhcrelay $ip_d"
fi
;;
*)
echo"无效输入,请重新输入"
;;
esac
------------------------------------------------------------------------------------------------------------------