firewallld를 활용한 NAT(SNAT 및 DNAT) 실습 구성

실습 환경 구성

호스트명 운영체제 IP 주소
gateway-server CentOS 8 IP: 192.168.80.100 (VMnet1)
서브넷 마스크: 255.255.255.0
게이트웨이: 192.168.80.2
nat-gateway CentOS 8 IP1: 192.168.80.10 (VMnet1)
서브넷 마스크: 255.255.255.0
IP2: 202.112.113.112 (VMnet8)
서브넷 마스크: 255.255.255.0
게이트웨이: 202.112.113.112
external-web CentOS 8 IP 주소: 202.112.113.113 (VMnet8)
서브넷 마스크: 255.255.255.0
게이트웨이: 202.112.113.113

가상 머신 네트워크 설정

세 개의 가상 머신 설정이 완료된 후 시스템을 재부팅해야 한다.

[root@gateway-server ~]# reboot

연결성 검증

  • ping 192.168.80.100 - 성공
  • ping 202.112.113.112 - 실패
  • ping 202.112.113.113 - 성공

SNAT 설정 과정

1. IP 포워딩 활성화

nat-gateway 서버에서 IP 포워딩 기능을 활성화해야 한다. 이는 패킷이 내부 네트워크에서 외부 네트워크로 라우팅될 수 있게 한다.

[root@nat-gateway ~]# cat /proc/sys/net/ipv4/ip_forward

반환 값이 net.ipv4.ip_forward = 0인 경우, 포워딩 기능이 비활성화된 상태이다.

다음 명령으로 일시적으로 IP 포워딩을 활성화한다 (재부팅 시 해제됨):

[root@nat-gateway ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

2. 외부 인터페이스를 external 영역에 할당

내부 네트워크의 컴퓨터는 외부 네트워크에서 라우팅되지 않으므로, NAT 게이트웨이를 통해 외부로 연결해야 한다. 이를 위해 외부 인터페이스를 firewalld의 external 영역에 추가한다.

3. IP 매스커레이드 활성화

SNAT을 동작시키려면 외부 영역에서 매스커레이드를 활성화해야 한다.

[root@nat-gateway ~]# firewall-cmd --permanent --zone=external --add-masquerade
[root@nat-gateway ~]# firewall-cmd --reload
success

[root@nat-gateway ~]# firewall-cmd --permanent --zone=external --query-masquerade
yes

[root@nat-gateway ~]# firewall-cmd --zone=external --list-all
external (active)
  ......
  interfaces: ens224
  ......
  masquerade: yes
  .......

4. 내부 인터페이스를 internal 영역에 할당

내부 네트워크 인터페이스를 internal 영역으로 변경한다.

[root@nat-gateway ~]# firewall-cmd --get-zone-of-interface=ens160
public

[root@nat-gateway ~]# firewall-cmd --permanent --zone=internal --change-interface=ens160
the interface is under control of NetworkManager, setting zone to 'internal'.
success

[root@nat-gateway ~]# firewall-cmd --reload
[root@nat-gateway ~]# firewall-cmd --zone=internal --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  ......

5. 외부 네트워크 웹 서버 구성

external-web 서버에서 테스트용 웹 서비스를 구성한다.

[root@external-web ~]# mount /dev/cdrom /media
[root@external-web ~]# dnf clean all
[root@external-web ~]# dnf install httpd -y
[root@external-web ~]# firewall-cmd --permanent --add-service=http
[root@external-web ~]# firewall-cmd --reload
[root@external-web ~]# firewall-cmd --list-all
[root@external-web ~]# systemctl restart httpd
[root@external-web ~]# netstat -an | grep :80
[root@external-web ~]# firefox 127.0.0.1

6. 내부 네트워크에서 SNAT 테스트

[root@gateway-server ~]# ping 202.112.113.113
[root@gateway-server ~]# firefox 202.112.113.113

DNAT 설정 과정

1. 내부 네트워크 웹 서버 구성

gateway-server에서 내부 웹 서버를 설정한다.

[root@gateway-server ~]# mount /dev/cdrom /media
[root@gateway-server ~]# dnf clean all
[root@gateway-server ~]# dnf install httpd -y
[root@gateway-server ~]# systemctl restart httpd
[root@gateway-server ~]# netstat -an | grep :80
[root@gateway-server ~]# firefox 127.0.0.1

2. DNAT 포워딩 규칙 구성

nat-gateway에서 외부에서 내부 웹 서버로의 포워딩을 설정한다. 외부 영역의 80번 포트로 들어오는 요청을 내부 네트워크의 gateway-server (192.168.80.100)의 80번 포트로 매핑한다.

[root@nat-gateway ~]# firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toaddr=192.168.80.100
success

[root@nat-gateway ~]# firewall-cmd --reload

[root@nat-gateway ~]# firewall-cmd --zone=external --query-forward-port=port=80:proto=tcp:toaddr=192.168.80.100
yes

[root@nat-gateway ~]# firewall-cmd --zone=external --list-all
external (active)
  ......
  masquerade: yes
  forward-ports: port=80:proto=tcp:toport=:toaddr=192.168.80.100
  .......

3. 외부 네트워크에서 DNAT 테스트

external-web 서버에서 NAT 게이트웨이의 외부 IP (202.112.113.112)를 통해 내부 웹 서버에 접근한다. 내부 IP (192.168.80.100)로는 직접 접근할 수 없다.

[root@external-web ~]# ping 192.168.80.100
connect: 네트워크에 도달할 수 없음

[root@external-web ~]# firefox 202.112.113.112

설정 정리

실습 완료 후 NAT 게이트웨이에서 설정한 SNAT 및 DNAT 규칙을 제거한다.

[root@nat-gateway ~]# firewall-cmd --permanent --zone=internal --remove-forward-port=port=80:proto=tcp:toaddr=192.168.80.100

[root@nat-gateway ~]# firewall-cmd --permanent --zone=public --change-interface=ens224
[root@nat-gateway ~]# firewall-cmd --permanent --zone=public --change-interface=ens160
[root@nat-gateway ~]# firewall-cmd --reload

태그: firewalld NAT SNAT DNAT CentOS

7월 4일 00:35에 게시됨