실습> 리눅스에서 NAT 구현하기
nat
- POSTROUTING : Source NAT(SNAT) 타겟과 매칭되어 내부 네트워크에서 방화벽을 통해 외부로 나갈 때 사용
- PREROUTING : Destination NAT(DNAT)타겟과 매칭되어 주로 외부에서 방화벽 내부 서버로 향하는 패킷을 포워딩 할 때 사용
- OUTPUT : nat 테이블을 빠져 나갈때 사용
DNAT
108.101 ----------> 102.101
[PC]----------------------[방화벽]-----------[WEB#1]
108.1 108.3 102.254 102.101
108.101 <----------- 102.101
SNAT
----------------------------- 참고 ----------------------------
iptables -t nat -A PREROUTING -d 목적지 -j DNAT --to 돌려줄IP주소
-t nat
DNAT((Destnation NAT) : 외부의 공인 IP를 내부의 사설IP로 포워딩 하는 경우 사용
---------------------->
외부망 ------- [ firewall ] ------- 내부망
<----------------------
-t nat
SNAT(Source NAT) : 내부의 사설 IP를 외부의 공인 IP로 변환할 때 사용
MASQUERADE
iptables -t nat -A POSTROUTING -s 출발지 -o ens33 -j MASQUERADE
----------------------------- 참고 ----------------------------
포트 포워딩 형식 :
iptables -t nat -A PREROUTING -d 목적지 -p tcp --dport 포트번호 -j DNAT --to 포워딩IP:포트
ex)
iptables -t nat -A PREROUTING -d 192.168.108.101 -p tcp --dport 80 -j DNAT --to 192.168.102.101:80
설명 :
-t nat : 주소변환 테이블인 nat 테이블을 사용한다.
-A PREROUTING : 외부에서 내부로 들어오는 패킷은 nat 테이블의 PREROUTING 체인을 사용한다.
-d : 목적지 IP주소는 192.168.108.101 을 사용한다.
-p tcp : 프로토콜은 tcp 프로토콜을 사용한다.
--dport 80 : 목적지 포트는 80번으로 사용한다.
-j DNAT : 목적지를 주소를 변경한다
--to(--to-destination) 192.168.102.101:80 : 변경할 목적지는 192.168.102.101의 80포트로 설정한다.
실습> 리눅스에서 NAT 사용하기
+-- ens33
|
| +-- ens33 192.168.108.101
| |
| | +-- ens37 +-- ens33
| | | |
외부망 +---+[server1]+---- 내부망 --------+[server2]
| | F/W | | WEB Server
| | | |
| | | 192.168.102.101 VMnet2 (GateWay : 192.168.102.254)
| | 192.168.102.254 VMnet2
| |
| 192.168.108.3 VMnet8(NAT) (GateWay : 192.168.108.2)
|
192.168.108.2
1. VMnet 추가
VMnet2 를 추가하고 네트워크를 아래처럼 설정한다.
네트워크 : 192.168.102.101/24
DHCP : 활성화
2. server1 설정
NIC카드(랜카드) 추가
NIC(Network Interface Card) : 통신을 하기 위한 장비
[root@server1 ~]# init 0
| ens33 IP Address : 192.168.108.3 Subnet Mask : 255.255.255.0 Default Gateway : 192.168.108.2 DNS Server : 163.126.63.1 |
| ens36 IP Address : 192.168.102.254 Subnet Mask : 255.255.255.0 Default Gateway : x DNS Server : x |
VMnet 설정 후 네트워크를 설정한다.
[root@server1 ~]# nmtui
[root@server1 ~]# systemctl restart network
[root@server1 ~]# ip a
[root@server1 ~]# echo '192.168.108.3 www.sever1.kr server1' >> /etc/hosts
3. Server2 설정
| ens33 IP Address : 192.168.102.101 Subnet Mask : 255.255.255.0 Default Gateway : 192.168.102.254 DNS Server : 168.126.63.1 |
VMnet 설정 후 네트워크를 설정한다.
[root@server2 ~]# nmtui
[root@server2 ~]# systemctl restart network
[root@server2 ~]# ip a
[root@server2 ~]# hostname
server2.linuxmaster.net
[root@server2 ~]# echo '192.168.102.101 sever2.linuxmaster.net server2' >> /etc/hosts
4. 방화벽 중지
server1과 server2 둘 다 firewalld를 중지시키고 서비스를 비활성화 한다.
[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# systemctl disable firewalld
[root@server2 ~]# systemctl stop firewalld
[root@server2 ~]# systemctl disable firewalld
[root@server1 ~]# yum -y install iptables-services
[root@server1 ~]# systemctl enable iptables
5. 통신 확인
Host OS (Windows)에서 192.168.102.101로 통신이 되는지 ping으로 확인한다.
C:\>ping 192.168.102.101
| Ping 192.168.102.101 32바이트 데이터 사용: 192.168.2.101의 응답: 바이트=32 시간<1ms TTL=64 192.168.2.101의 응답: 바이트=32 시간<1ms TTL=64 192.168.2.101의 응답: 바이트=32 시간<1ms TTL=64 192.168.2.101의 응답: 바이트=32 시간<1ms TTL=64 192.168.2.101에 대한 Ping 통계: 패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실), 왕복 시간(밀리초): 최소 = 0ms, 최대 = 0ms, 평균 = 0ms |
Host OS에서 192.168.108.3으로 통신이 되는지 ping으로 확인한다.
C:\>ping 192.168.108.3
| Ping 192.168.108.3 32바이트 데이터 사용: 192.168.108.3의 응답: 바이트=32 시간<1ms TTL=64 192.168.108.3의 응답: 바이트=32 시간<1ms TTL=64 192.168.108.3의 응답: 바이트=32 시간<1ms TTL=64 192.168.108.3의 응답: 바이트=32 시간<1ms TTL=64 192.168.108.3에 대한 Ping 통계: 패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실), 왕복 시간(밀리초): 최소 = 0ms, 최대 = 0ms, 평균 = 0ms |
6. DNAT/SNAT 설정
DNAT 설정 : 외부에서 내부망에 있는 192.168.102.101 서버로 들어올 수 있는 길을 열어주는 설정이다.
SNAT 설정 : 내부망있는 192.168.102.101 서버에서 외부로 나갈 수 있는 길을 열어주는 설정이다.
ens33 인터페이스에 IP주소 192.168.108.101 을 추가한다.
[root@server1 ~]# nmtui
ens33 : 192.168.108.101/24
[root@server1 ~]# systemctl restart network
[root@server1 ~]# ip a
nat 테이블에 DNAT 룰을 설정한다.
[root@server1 ~]# iptables -t nat -A PREROUTING -d 192.168.108.101 \
-j DNAT --to 192.168.102.101 -m comment --comment '108.101 -> 102.101'
nat 테이블에 SNAT 룰을 설정한다.
[root@server1 ~]# iptables -t nat -A POSTROUTING -s 192.168.102.101 \
-j SNAT --to 192.168.108.101 -m comment --comment '102.101 -> 108.101'
nat 테이블에 설정된 룰을 확인한다.
[root@server1 ~]# iptables -t nat -nL
| Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT all -- 0.0.0.0/0 192.168.108.101 /* 108.101 -> 102.101 */ to:192.168.102.101 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.102.101 0.0.0.0/0 /* 102.101 -> 108.101 */ to:192.168.108.101 |
현재 설정된 룰을 iptables-save 명령어로 /etc/sysconfig/iptables 파일에 저장한다.
/etc/sysconfig/iptables 파일은 방화벽 룰이 저장된 파일로 부팅 시 방화벽이 시작되면 이 파일에 저장된 룰을 설정한다.
[root@server1 ~]# iptables-save > /etc/sysconfig/iptables
7. 포워딩 설정
포워딩이란 자신에게 온 패킷을 다른 네트워크로 전달해주는 역할을 한다.
라우터에서 다른 네트워크로 패킷을 전달해주는 것과 동일하다.
임시적으로 포워딩 설정 : echo 1 > /proc/sys/net/ipv4/ip_forward
영구적으로 포워딩 설정 : /etc/sysctl.conf 수정
[root@server1 ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@server1 ~]# sysctl -p
net.ipv4.ip_forward = 1
8. 웹 서버
내부망 server2에서 웹서버 패키지를 설치하고 웹 문서를 작성한다.
[root@server2 ~]# yum -y install httpd
[root@server2 ~]# systemctl enable httpd
[root@server2 ~]# systemctl start httpd
[root@server2 ~]# cd /var/www/html
[root@server2 html]# vi index.html
<html>
<head>
<title> test server </title>
<meta charset=utf-8>
</head>
<body>
192.168.102.101 server!
</body>
</html>
9. 접속
브라우저에서 접속하면 아래처럼 192.168.102.101 서버의 웹문서 내용이 출력되어야 한다.
http://192.168.108.101/
192.168.102.101 server!
'Linux > iptables' 카테고리의 다른 글
| [Linux] iptables multiport 모듈 사용하기 (0) | 2021.11.13 |
|---|---|
| [Linux] Ubuntu 서버에 iptables NAT 설정 (0) | 2021.11.13 |
| [Linux] iptables 로그 기록 (0) | 2021.11.13 |
| [Linux] iptables 방화벽을 이용한 IP 주소 차단하기 (0) | 2021.11.13 |
| [Linux] iptables 사용자 정의 체인 설정하기 (0) | 2021.11.13 |