42.3. nftables를 사용하여 NAT 구성
nftables
에서는 다음 NAT(네트워크 주소 변환) 유형을 구성할 수 있습니다.
- masquerading
- 소스 NAT(SNAT)
- 대상 NAT(DNAT)
- 리디렉션
iifname
및 oifname
매개변수에만 실제 인터페이스 이름을 사용할 수 있으며 대체 이름(altname
)은 지원되지 않습니다.
42.3.1. NAT 유형
이는 다른 NAT(네트워크 주소 변환) 유형입니다.
- masquerading 및 source NAT(SNAT)
이러한 NAT 유형 중 하나를 사용하여 패킷의 소스 IP 주소를 변경합니다. 예를 들어, 인터넷 서비스 공급자(ISP)는
10.0.0.0/8
과 같은 개인 IP 범위를 라우팅하지 않습니다. 네트워크에서 개인 IP 범위를 사용하고 사용자가 인터넷의 서버에 연결할 수 있어야 하는 경우 이러한 범위의 패킷의 소스 IP 주소를 공용 IP 주소에 매핑합니다.마스커레이딩과 SNAT는 서로 매우 유사합니다. 차이점은 다음과 같습니다.
- 마스커레이딩은 발신 인터페이스의 IP 주소를 자동으로 사용합니다. 따라서 발신 인터페이스에서 동적 IP 주소를 사용하는 경우 masquerading을 사용합니다.
- SNAT는 패킷의 소스 IP 주소를 지정된 IP로 설정하고 발신 인터페이스의 IP를 동적으로 검색하지 않습니다. 따라서 SNAT는 masquerading보다 빠릅니다. 발신 인터페이스에서 고정 IP 주소를 사용하는 경우 SNAT를 사용합니다.
- 대상 NAT(DNAT)
- 이 NAT 유형을 사용하여 들어오는 패킷의 대상 주소와 포트를 다시 작성합니다. 예를 들어 웹 서버가 개인 IP 범위의 IP 주소를 사용하므로 인터넷에서 직접 액세스할 수 없는 경우 라우터에 DNAT 규칙을 설정하여 수신 트래픽을 이 서버로 리디렉션할 수 있습니다.
- 리디렉션
- 이 유형은 체인 후크에 따라 패킷을 로컬 시스템으로 리디렉션하는 특수한 DNAT의 경우입니다. 예를 들어 서비스가 표준 포트와 다른 포트에서 실행되는 경우 표준 포트에서 들어오는 트래픽을 이 특정 포트로 리디렉션할 수 있습니다.
42.3.2. nftables를 사용하여 마스커레이딩 구성
마스커레이딩을 사용하면 라우터에서 인터페이스를 통해 인터페이스의 IP 주소로 전송된 패킷의 소스 IP를 동적으로 변경할 수 있습니다. 즉, 인터페이스가 새 IP가 할당되면 nftables
는 소스 IP를 교체할 때 새 IP를 자동으로 사용합니다.
ens3
인터페이스를 통해 호스트를 나가는 패킷의 소스 IP를 ens3
에 설정된 IP로 바꿉니다.
프로세스
테이블을 생성합니다.
nft add table nat
# nft add table nat
Copy to Clipboard Copied! 다음 표에
다음 체인을
추가합니다.nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
Copy to Clipboard Copied! 중요prerouting
체인에 규칙을 추가하지 않더라도nftables
프레임워크에는 수신되는 패킷 응답과 일치하도록 이 체인이 필요합니다.쉘이 음수 우선순위 값을
nft
명령의 옵션으로 해석하지 못하도록--
옵션을nft
명령에 전달해야 합니다.ens3
인터페이스에서 발신 패킷과 일치하는postrouting
체인에 규칙을 추가합니다.nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masquerade
Copy to Clipboard Copied!
42.3.3. nftables를 사용하여 소스 NAT 구성
라우터에서 소스 NAT(SNAT)를 사용하면 인터페이스를 통해 전송된 패킷의 IP를 특정 IP 주소로 변경할 수 있습니다. 그런 다음 라우터는 발신 패킷의 소스 IP를 대체합니다.
프로세스
테이블을 생성합니다.
nft add table nat
# nft add table nat
Copy to Clipboard Copied! 다음 표에
다음 체인을
추가합니다.nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
Copy to Clipboard Copied! 중요postrouting
체인에 규칙을 추가하지 않더라도nftables
프레임워크에는 이 체인이 발신 패킷 응답과 일치해야 합니다.쉘이 음수 우선순위 값을
nft
명령의 옵션으로 해석하지 못하도록--
옵션을nft
명령에 전달해야 합니다.ens3
을 통해 발신 패킷의 소스 IP를192.0.2.1
로 대체하는postrouting
체인에 규칙을 추가합니다.nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1
# nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1
Copy to Clipboard Copied!
42.3.4. nftables를 사용하여 대상 NAT 구성
대상 NAT(DNAT)를 사용하면 라우터의 트래픽을 인터넷에서 직접 액세스할 수 없는 호스트로 리디렉션할 수 있습니다.
예를 들어, DNAT를 사용하면 라우터에서 포트 80
및 443
으로 전송되는 들어오는 트래픽을 IP 주소 192.0.2.1
이 있는 웹 서버로 리디렉션합니다.
프로세스
테이블을 생성합니다.
nft add table nat
# nft add table nat
Copy to Clipboard Copied! 다음 표에
다음 체인을
추가합니다.nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
Copy to Clipboard Copied! 중요postrouting
체인에 규칙을 추가하지 않더라도nftables
프레임워크에는 이 체인이 발신 패킷 응답과 일치해야 합니다.쉘이 음수 우선순위 값을
nft
명령의 옵션으로 해석하지 못하도록--
옵션을nft
명령에 전달해야 합니다.라우터의
ens3
인터페이스에서 IP 주소192.0.2.1
을 사용하여 웹 서버로 들어오는 트래픽을 포트80
및443
으로 리디렉션하는이전
체인에 규칙을 추가합니다.nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1
# nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1
Copy to Clipboard Copied! 환경에 따라 SNAT 또는 마스커레이딩 규칙을 추가하여 웹 서버에서 발신자로 반환되는 패킷의 소스 주소를 변경합니다.
ens3
인터페이스에서 동적 IP 주소를 사용하는 경우 마스커레이딩 규칙을 추가합니다.nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masquerade
Copy to Clipboard Copied! ens3
인터페이스에서 고정 IP 주소를 사용하는 경우 SNAT 규칙을 추가합니다. 예를 들어ens3
에서198.51.100.1
IP 주소를 사용하는 경우 다음을 실행합니다.nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
# nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
Copy to Clipboard Copied!
패킷 전달을 활성화합니다.
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied!
42.3.5. nftables를 사용하여 리디렉션 구성
리디렉션
기능은 체인 후크에 따라 패킷을 로컬 시스템으로 리디렉션하는 대상 DNAT(네트워크 주소 변환)의 특수한 사례입니다.
예를 들어 로컬 호스트의 포트 22
로 전송된 수신 및 전달된 트래픽을 포트 2222
로 리디렉션할 수 있습니다.
프로세스
테이블을 생성합니다.
nft add table nat
# nft add table nat
Copy to Clipboard Copied! 테이블에
사전
체인을 추가합니다.nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }
# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }
Copy to Clipboard Copied! 쉘이 음수 우선순위 값을
nft
명령의 옵션으로 해석하지 못하도록--
옵션을nft
명령에 전달해야 합니다.포트 22에서 들어오는 트래픽을 포트
22
로 리디렉션하는사전
아웃 체인에 규칙을 추가합니다.nft add rule nat prerouting tcp dport 22 redirect to 2222
# nft add rule nat prerouting tcp dport 22 redirect to 2222
Copy to Clipboard Copied!