[Ops Engineer] NAT gateway 및 DHCP 서버 구현하기

HyeonSeok·2023년 4월 11일
0

Ops Engineering

목록 보기
12/13

1. NAT란

NAT, Network Address Transfer의 약자로 간단히 말해서 public IP -> private IP, private IP -> public IP 형태로 변환해주는 장치를 말한다.
지금은 수많은 private 네트워크가 존재하며 private 네트워크의 특성상 public과 그 자체로 통신할 수 없다. (IP주소 유일성 법칙 위반)
때문에 private IP를 public IP로 변환해 주어서 인터넷에 연결하게 되는데 이때 필요한 동작을 NAT가 해주게 된다.
그리고 우리는 private Network와 public Network 사이에 NAT 서버를 두어 이를 처리해 줄 것이다.

NAT Gateway

위에서 NAT에 대해서 얘기했고, 이제 NAT서버를 사이에 둔다고 했다.
그럼 이 NAT서버는 일종의 내가 구축한 private network의 관문이나 다름없는 역할을 하게 된다.
이때 이 서버를 NAT Gateway라고 부른다.

2. 환경 세팅

vBox로 이를 진행할 것이기 때문에 우선 vBox의 VM설정에서 네트워크 어댑터를 2개를 설정한다.
1. 브릿지
2. NAT network

브릿지는 VM이 외부네트워크에 직접적으로 연결된 것과 같은 형태를 만들어준다.
NAT network는 내가 구축한 내부 네트워크를 만들어서 VM끼리 하나의 같은 네트워크에 존재하는 효과를 만들어준다.

3. NAT 서버 설정

랜카드 설정

vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
┌────────────────────────────── 외부랜카드 ─────────────────────────────┐
TYPE=Ethernet
BOOTPROTO=none	
NAME=enp0s8
DEVICE=enp0s8
ONBOOT=yes
IPADDR=172.30.1.83
NETMASK=255.255.255.0
GATEWAY=172.30.1.254
DNS1=8.8.8.8
DNS2=8.8.4.4
└───────────────────────────────────────────────────────────────────────┘

[설명]
NAME과 DEVICE 그리고 파일이름에 있는 enp0s8은 CentOS에서 인식하고 있는 랜카드의 이름이다. ip a 명령어를 통해서 확인하여 위에서 브릿지로 설정한 랜카드의 이름을 넣으면 된다.
BOOTPROTO는 네트워크 프로토콜을 설정하는 것으로 none이면 정적할당, dhcp면 동적할당을 의미한다.
GATEWAY 및 IPADDR는 실제로 컴퓨터가 연결된 브릿지의 주소를 적어 넣으면 된다.

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
┌────────────────────────────── 내부랜카드 ─────────────────────────────┐
TYPE=Ethernet
BOOTPROTO=none
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=10.31.0.1
NETMASK=255.255.255.0
└───────────────────────────────────────────────────────────────────────┘

여기도 마찬가지로 작성하며 IPADDR에는 NAT Gateway의 주소를 넣는다.

network 재실행 및 firewall zone 설정

network 재실행

systemctl restart network

firewall zone 설정

systemctl status firewalld
firewall-cmd --get-active-zones
# 밑에 두개 랜카드가 퍼블릭에 있단 소리
┌───────────────────────────────┐
│public						 │	
│  interfaces: enp0s8 enp0s3 │	 
└───────────────────────────────┘

# nat를 위한 첫번째 작업
# 밑에 명령어는 각각 랜카드를 퍼블릭과 프라이빗으로 나누겠단 소리임.
nmcli c mod enp0s8 connection.zone external
nmcli c mod enp0s3 connection.zone internal
firewall-cmd --get-active-zone
┌───────────────────────────────┐
│internal					 │
│  interfaces: enp0s3		 │
│external					 │
│  interfaces: enp0s8		 │
└───────────────────────────────┘

랜카드의 zone을 구분할 때 zone의 종류로 private 없고 internal, external이 존재한다.

리눅스 시스템을 라우터로 만드는 방법

# ip_forward는 라우팅을 의미함.
vi /etc/sysctl.conf
	net.ipv4.ip_forward=1
reboot

# 확인명령어
cat /proc/sys/net/ipv4/ip_forward
1
sysctl -w net.ipv4.ip_forward=1
sysctl -p # 설정 저장

이 명령어도 있지만 이 방법은 간혹 설정이 풀릴 수도 있다.

4. DHCP 서버 설정

설치 및 설정

yum install dhcp -y
vi /etc/dhcp/dhcpd.conf
┌─────────────────────────── 아래처럼 작성 ──────────────────────────────┐
ddns-update-style interim;	
subnet 10.31.0.0 netmask 255.255.255.0 {	
# = 10.31.0.0/24			
option routers 10.31.0.1;			
option subnet-mask 255.255.255.0;	
range dynamic-bootp 10.31.0.100 10.31.0.110;
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 7200;	
max-lease-time 86400;			
}							  
└────────────────────────────────────────────────────────────────────────┘

systemctl enable --now dhcpd

ddns-update... : 동적 dns 구성을 위한것. 지금은 많이 안씀
option routers : 라우터의 랜카드 주소 설정. (internal 랜카드)
range dynamic-bootp : 사용할 IP를 범위로 지정
option domain-name-servers : DNS의 주소, 10... 는 내가 나중에 만들 DNS의 주소.
default-lease-time : IP 할당 제한 시간, 매 정해진 시간마다 사용중인지 확인.
max-lease-time : IP 최대 할당 시간, 계속 사용중이어도 일정시간 이상사용하면 무조건 회수해서 재할당

profile
즐겁게 사는 개발자가 됩시다

0개의 댓글