linux의 iptables는 다양한 기능들을 제공하기 때문에 아주 활용도가 높다!
오늘은 iptables를 이용한 NAT(Network Address Translation)설정 방법을 알아보자.
NAT(Network Address Translation?)
NAT은 말 그대로 네트워크 주소를 변환하는 것을 말하는데, 일반적으로 SNAT, DNAT(Source/Destination)과 같이 지칭한다.
NAT 기능을 활용하여 linux server를 proxy/loadbalancer server로 활용할 수 있는 등 특수한 네트워크 환경에서 다양한 솔루션이 될 수 있다!
SNAT과 DNAT은 선언할 수 있는 iptables chain이 다른데, 이는 다음에 다시 한번 알아보자 :)
방법
우선 mandatory로 필요한 설정만 추가하여 SNAT을 설정해보자
iptables -I POSTROUTING -t nat -j SNAT --to-source 2.2.2.2
- -I는 Insert Mode의 약자로, -I 이후에 숫자를 입력하면 해당 라인에 rule을 추가한다.
- POSTROUTING은 chain의 이름으로 route table 조회 이후에 snat을 수행한다.
- -t nat은 table의 이름이다
- -j jump의 약자로 어떤 rule을 적용할것인지에 대한 내용이다.
- --to-source 어떤 source addr로 SNAT할건지 결정한다.
다양한 옵션
아래와 같이 더욱 다양한 옵션을 활용할 수 있다.
iptables -I POSTROUTING -t nat -p tcp -s 10.10.0.0/16 -d 20.20.0.0/16 -j SNAT --to-source 2.2.2.2:1000-1999
- -p 는 어떤 protocol에 대해 적용할 건지에 대한 내용이다
- -s는 해당 rule을 적용할 source address 대역을 정의한다
- -d는 해당 rule을 적용할 destination address 대역을 정의한다
- address:{{PORT_RANGE}}로 SNAT할 때 port range까지 함께 지정할 수 있다.
위와 비슷한 방법으로 DNAT을 역시 설정할수 있으며 차이점은 POSTROUTING chain이 아닌 PREROUTING chain에 rule이 적용된다는 것이다. (route table 조회 이전)
예)
iptables -I PREROUTING -t nat -p tcp -s 10.10.0.0/16 -d 20.20.0.0/16 -j DNAT --to-destination 2.2.2.2:1000-1999
HONEY TIP : snat, dnat이 PREROUTING인지 POSTROUTING인지 헷갈리면, 이렇게 생각하자.
목적지에 대한 route 조회 이후 destination이 바뀌면 안 되니깐 dnat은 route 조회 이전에(PREROUTING) 수행한다..!(?)..(잉?)
반응형
'linux' 카테고리의 다른 글
도메인 주소 확인하는 방법 (nslookup, dig) (0) | 2022.08.11 |
---|---|
[linux]특정 packet만 지정하여 다른 경로(route)로 보내기 (0) | 2022.02.25 |
Linux 표준 출력 제어 (STDOUT, STDERR) (0) | 2021.07.24 |
리눅스 파일 첫번째/마지막줄 출력 (head / tail) (0) | 2021.07.23 |
inotifywait (0) | 2021.07.19 |