본문 바로가기

linux

iptables로 snat, dnat 설정하기 !

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) 수행한다..!(?)..(잉?)

 

반응형