본문 바로가기

Operating Systems/Linux

[ Linux ] DHCP 서버 설치

1. CentOS7

 

[ DHCP 서버 ]

# 나의 아이피 확인
DHCP_SERVER_IP=$(ifconfig | grep -A 2 ens | grep "inet " | awk '{ print $2 }')

CLI_HARD_ADDR="00:0c:29:2d:d1:3c"

yum -y install dhcp

# 86400 = 60 * 60 * 24
# 하루의 IP 임대기간을 할당
# max-lease-time : 클라이언트가 하나의 ip 주소를 할당받은 뒤
# 보유할 수 있는 최대의 초 단위 시간
cat <<DHCP_SETTING > /etc/dhcp/dhcpd.conf
subnet ${DHCP_SERVER_IP%.*}.0 netmask 255.255.255.0
{
$(printf '\t')host client1
$(printf '\t'){
$(printf '\t')$(printf '\t')option host-name "client1";
$(printf '\t')$(printf '\t')hardware ethernet ${CLI_HARD_ADDR};
$(printf '\t')$(printf '\t')fixed-address ${DHCP_SERVER_IP%.*}.251;
$(printf '\t')}
$(printf '\t')option routers ${DHCP_SERVER_IP%.*}.2;
$(printf '\t')option subnet-mask 255.255.255.0;
$(printf '\t')range dynamic-bootp ${DHCP_SERVER_IP%.*}.30 ${DHCP_SERVER_IP%.*}.50;
$(printf '\t')option domain-name-servers 8.8.8.8;
$(printf '\t')default-lease-time 86400;
$(printf '\t')max-lease-time 172800;
}
DHCP_SETTING

systemctl restart dhcpd

# dhcp 서버는 dhcp request를 mac 주소 기반으로
# 전달받기 때문에 ip기반으로 동작하는
# firewall-cmd 설정이 적용되지 않음
# dhcp 서버 포트 67번 확인
lsof -i udp:67

# 기본 내장되는 DHCP/DNS 서버
# 1000 클라이언트 이하 로컬 네트워크에서 활용되지만
# dhcp 서버를 설치하므로 사용하지 않도록 설정
ps -ef | grep dnsmasq | grep -v grep | awk '{print $2}' | xargs kill -9 

# dnsmasq 부팅시 사용하지 않도록 설정
systemctl disable libvirtd

cat /var/lib/dhcpd/dhcpd.leases

# 패킷을 확인을 위해 wireshark 설치
yum -y install wireshark wireshark-gnome

# wireshark 실행
wireshark &

# 참조 (dhcp leases 삭제 & arp 삭제)
# dhclient -r -v ens33 && rm /var/lib/dhcp/dhclient.* ; dhclient -v ens33
# ip -s -s neigh flush all

 

[ 클라이언트 ]

# 기본 내장되는 DHCP/DNS 서버
# 1000 클라이언트 이하 로컬 네트워크에서 활용되지만
# dhcp 서버를 설치하므로 사용하지 않도록 설정
ps -ef | grep dnsmasq | grep -v grep | awk '{print $2}' | xargs kill -9 

# dnsmasq 부팅시 사용하지 않도록 설정
systemctl disable libvirtd

# 네트워크 설정 파일명 저장 변수
NET_SET_FILE=`ls /etc/sysconfig/network-scripts | grep ifcfg | grep -v lo`

sed -i "s/IPADDR=.*//g" /etc/sysconfig/network-scripts/${NET_SET_FILE}
sed -i "s/PREFIX=.*//g" /etc/sysconfig/network-scripts/${NET_SET_FILE}
sed -i "s/GATEWAY=.*//g" /etc/sysconfig/network-scripts/${NET_SET_FILE}
sed -i "s/DNS.*//g" /etc/sysconfig/network-scripts/${NET_SET_FILE}

sed -i "s/^BOOTPROTO.*/BOOTPROTO=dhcp/g" /etc/sysconfig/network-scripts/${NET_SET_FILE}

systemctl restart network

 

2. Ubuntu20

 

[ DHCP 서버 ]

apt-get -y install isc-dhcp-server

CLI_HARD_ADDR="00:0c:29:2d:d1:3c"

# 인터페이스 이름 확인
NET_INTERFACE=`ls /sys/class/net | grep -v lo | head -1`

DHCP_SERVER_IP=`ip route | grep -e ${NET_INTERFACE} | grep src | awk '{print $9}'`

# 86400 = 60 * 60 * 24
# 하루의 IP 임대기간을 할당
# max-lease-time : 클라이언트가 하나의 ip 주소를 할당받은 뒤
# 보유할 수 있는 최대의 초 단위 시간
cat <<DHCP_SETTING > /etc/dhcp/dhcpd.conf
subnet ${DHCP_SERVER_IP%.*}.0 netmask 255.255.255.0
{
$(printf '\t')host client1
$(printf '\t'){
$(printf '\t')$(printf '\t')option host-name "client1";
$(printf '\t')$(printf '\t')hardware ethernet ${CLI_HARD_ADDR};
$(printf '\t')$(printf '\t')fixed-address ${DHCP_SERVER_IP%.*}.251;
$(printf '\t')}
$(printf '\t')option routers ${DHCP_SERVER_IP%.*}.2;
$(printf '\t')option subnet-mask 255.255.255.0;
$(printf '\t')range dynamic-bootp ${DHCP_SERVER_IP%.*}.30 ${DHCP_SERVER_IP%.*}.50;
$(printf '\t')option domain-name-servers 8.8.8.8;
$(printf '\t')default-lease-time 86400;
$(printf '\t')max-lease-time 172800;
}
DHCP_SETTING

systemctl restart isc-dhcp-server

lsof -i udp:67

cat /var/lib/dhcp/dhcpd.leases

 

[ 클라이언트 ]

NET_INTERFACE=`ls /sys/class/net | grep -v lo | head -1`

cat <<DHCP_CLI_SETTING > /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
 version: 2
 renderer: NetworkManager
 ethernets:
  ${NET_INTERFACE}:
   dhcp4: yes
DHCP_CLI_SETTING

netplan apply

'Operating Systems > Linux' 카테고리의 다른 글

[ Linux ] VNC 서버 설치  (0) 2021.09.23
[ Linux ] Cron 활용  (0) 2021.08.22
[ Linux ] 사용자 관리 및 생성 [임시작성]  (0) 2021.08.15
[ Linux ] AWK 활용  (0) 2021.08.14
[ Linux ] SED 활용  (0) 2021.08.14