[Network] DDNS domain connect
* 공유기와 도메인 연동이란?
공유기는 외부와 연결되는 공인IP를 내부 사설망 IP인 192.168.0.* 등의 IP로 연결하여
하나의 공인IP를 내부에 존재하는 다수의 네트워크기기와 연결하는 역할을 합니다.
일반적으로 공유기는 고정 IP가 아닌 유동IP로 연결됩니다.
따라서, 공유기 내부에 서버를 구축하고 외부에서 접속을 할 때 필요한 유동 IP는 사람이 기억을 할수가 없으므로
도메인을 연동하면 더욱 편리하게 사용이 가능합니다.
* 공유기와 DDNS기능
공유기 회사에서는 DDNS(Dynamic DNS)를 기본적으로 제공합니다. 하지만 몇가지 제약조건이 있습니다.
ipTIME같은 경우에는 원하는 호스트명.iptime.org 와 같은 형식으로 DDNS를 제공할뿐, 일반적인 .com .net과 같은 독립도메인에 대한 연동은 제공하고 있지 않습니다.
(dyndns.org 업체의 DDNS연동기능을 제공하기는 하지만, 이럴 경우 dynDNS 의 서비스를 가입해야 합니다.)
DNSEver.com 에서는 예전부터 다이나믹DNS 기능을 제공하고, 공유기 내부에 다이나믹 DNS 클라이언트를 설치하여
유동IP 환경에서도 도메인을 연동 할 수 있도록 했지만, PC에 다이나믹 DNS 클라이언트를 설치하는 것이 번거로울 뿐만 아니라
공유기 내부에 PC가 꺼져있을 때는 IP주소 업데이트를 할 수 없는 단점이 있었습니다.
* DNSEver의 도메인별명(CNAME) 및 새로운 기능인 ANAME
공유기의 유동IP 주소를 회원님의 도메인과 연동하기 위하여 DNSEver에서는 ANAME기능을 이용할 수 있습니다.
ANAME에 대한 자세한 사항
* 공유기 자체의 DDNS와 도메인을 연동하는 개념
먼저 공유기 자체의 DDNS기능을 설정하여, 다이나믹DNS호스트명을 만듭니다.
예를 들어 ipTIME 공유기의 경우에는 공유기호스트명.iptime.org 의 형식이 됩니다.
이를 회원님의 도메인(예: domain.com)을 연동하기 위해서는
DNSEver.com 에서 도메인추가를 한 다음에, “도메인 별명(CNAME)관리”에서 원하시는 서브도메인과 공유기호스트명.iptime.org를 연결하면 됩니다.
기본적으로 루트도메인(도메인에 www 등 서브 도메인이 없는 기본 도메인. 예: domain.com)에는 CNAME를 “도메인 표준 규약”상 만들수 없습니다.
이를 극복하기 위하여 DNSEver에서는 루트도메인에 CNAME를 입력할 경우, 목적지 도메인명(공유기호스트명.iptime.org)을 자동으로 해석하여 이를 A레코드의 결과값인 IP주소로 반환하게 됩니다.
따라서, DNSEver에서 “도메인 별명(CNAME) 관리”에서 어떠한 서브도메인을 입력하더라도 이를 회원님이 설정한 공유기호스트명.iptime.org 로 연결할 수 있는 것입니다.
ipTIME공유기에서 도메인연동하는 방법(화면보면서 따라하기)
시작하기 전에 ipTIME 공유기 자체의 DDNS를 사용하기 위해서는 ipTIME 펌웨어 버전을 9.52 이상으로 업데이트해야 합니다.
관련공지: http://iptime.com/iptime/?page_id=16&pageid=1&mod=document&keyword=ddns&uid=14724
1. ipTIME의 “시스템 요약 정보”에 보면 “외부 IP 주소”라고 되어 있는 부분이 공유기에 연결된 공인IP입니다.
(스샷화면의 예에는 1.2.3.4로 되어 있지만, 공유기마다 다르게 나올 것입니다)
![iptime_ddns0](http://blog.kr.dnsever.com/wp-content/uploads/2015/08/iptime_ddns0.png)
여러분의 도메인명을 domain.com 으로 가정하고
www.domain.com 및 domain.com 에 대하여 공인IP주소(예 1.2.3.4)로 연결되도록 설정해보겠습니다.
2. ipTIME의 “고급 설정 > 특수 기능 > DDNS 설정” 메뉴로 이동합니다.
(펌웨어 버전에 따라 메뉴명이 약간 다를 수 있습니다.)
오른쪽 화면에서
“서비스 공급자”에서 “ipTIME DDNS”를 선택하고
호스트이름, 사용자 ID , 사용자 암호를 입력하여 추가를 하면 호스트이름(예:example.iptime.org)이 정상적으로 추가가 되었는지 확인합니다.
![iptime_ddns](http://blog.kr.dnsever.com/wp-content/uploads/2015/08/iptime_ddns.png)
설정을 마치고 ipTIME 상단의 “저장” 버튼을 눌러야, 공유기가 리셋되어도 설정내용이 날라가지 않으므로 주의하십시오.
![iptime_ddns2](http://blog.kr.dnsever.com/wp-content/uploads/2015/08/iptime_ddns2.png)
ipTIME의 설정을 다 마친 다음, 잠시(몇 분정도) 기다렸다가 DNS 쿼리를 해보면 ipTIME 공유기 DDNS가 공유기에 설정된 공인IP로 연결되는 것을 확인할 수 있습니다.
윈도우의 도스창(command prompt) 또는 리눅스의 터미널에서 아래와 같이 명령어로 확인가능합니다.
nslookup example.iptime.org
<= example.iptime.org 를 공유기에 설정한 DDNS호스트 이름으로 대체하세요.
위 결과값이 공유기에 설정되어 있는 "외부IP주소"(공인IP)와 동일하게 나오면 설정이 정상적으로 된 것입니다.
3. DNSEver.com 에서 도메인연동
DNSEver.com에 로그인 후, "도메인 추가"메뉴를 이용하여 도메인을 추가해주시고, 네임서버 설정을 완료하신 다음 해당 도메인을 클릭하십시오.
좌측에 "도메인 별명(CNAME)관리" 메뉴에서 연동할 도메인명에 대하여 서브도메인을 입력하십시오.
공유기에 설정한 ipTIME DDNS 호스트 이름을 목적지 도메인에 입력하여 추가하시면 됩니다.
(이 예제에서는 www.mydomain.com 및 mydomain.com 을 example.iptime.org 으로 연동하였으나, 회원님의 도메인명 및 ipTIME DDNS호스트이름을 입력해야 합니다)
![iptime_cname1](http://blog.kr.dnsever.com/wp-content/uploads/2015/08/iptime_cname1.png)
위 설정을 마치고 잠시 기다렸다가
(도메인에 대한 네임서버를 변경한지 얼마되지 않았거나, 레코드를 설정한지 얼마되지 않았으면 결과가 안 나올 수 있으나
이는 DNS의 TTL값 때문에 그런 것이므로 잠시(수분~수시간등)을 기다렸다가 다시 시도해보시기 바랍니다.)
윈도우의 도스창(command prompt) 또는 리눅스의 터미널에서 아래와 같이 명령어로 확인가능합니다.
nslookup mydomain.com
<= mydomain.com을 회원님의 도메인명으로 대체하여 입력하세요.
을 해보시면 회원님의 도메인명이 ipTIME 공유기에 연결된 “외부IP주소”(공인IP)와 동일하게 나올 것입니다.
즉, 도메인명과 공유기의 외부IP주소(공인IP)와의 연동이 완료된 것입니다.
이번에 DDNS를 변경한김에
위에 도메인을 하나 더 붙여주었다
물론 무료도메인인 내도메인.한국 에서 받은 도메인으로
단점이라고 해야하나?
iptime 관리자 페이지는 보안 때문인지 접속이 안되니
iptime.org 도메인으로 접속해야한다
사용중인 iptime 공유기는 A3004NS-Dual 제품으로
산지 얼마안됬는데 고장나서 A/S를 받았다
뭔 통신사 공유기도 멀쩡한데 낙뢰(?) 급 전원이 WAN 포트로 유입되서
회로가 고장났다나... 정전기로 인해 발생할 수 있다고는하는데
이해불가
암튼
공유기 설정페이지로 들어가보면
![](https://blog.kakaocdn.net/dn/bVkkpD/btqCckPwx6x/ZS9ptHcSQoBombLkd0j9kK/img.png)
기본설정 > 시스템 요약정보 메뉴
외부 IP가 보이는데 이게 외부에서 공유기로 찾아올 수 있는 IP이다
근데 고정 IP가 아닌이상 계속 변경이 되니 DDNS를 사용해줘야
외부에서 접속할 수 있게 된다
DDNS 설정
![](https://blog.kakaocdn.net/dn/cboAPb/btqCcALoykr/DBaO7K5AJOTzmkK6yiAwY1/img.png)
고급설정 > 특수기능 > DDNS 설정 메뉴
설정이 끝난상태라 음영으로 나온다
여기에서 DDNS를 설정 할 수 있는데
호스트 이름을 넣고 사용자 ID에 사용중인 이메일을 넣어주면된다
추후에 DDNS 재설정 등에 사용되는 모양이니 없는 메일로 넣으면...?
관리자 접속 포트 설정
![](https://blog.kakaocdn.net/dn/cr24a6/btqCcjJRigd/kcsF66skw372kqEpok7L50/img.png)
고급설정 > 보안기능 > 공유기 접속/보안관리 메뉴
외부에서 공유기 관리자 페이지에 접근할 수 있는 메뉴로
DDNS 설정만 하면 관리자 페이지에 접근할 수 없다
가능하면 알려진 포트를 제외하고 설정해주면 된다
DDNS 테스트
![](https://blog.kakaocdn.net/dn/dfMLlp/btqCd0P7vPl/mFoWaQ0ybyQWzbQLZanrI1/img.png)
DDNS로 공유기 관리자 페이지에 접근한 모습
정상적으로 관리자페이지에 접근이 된다
![](https://blog.kakaocdn.net/dn/bYUmlT/btqCbTLreY7/X4PViVqGoyK8H1ZxtGOBW1/img.png)
내도메인.한국 에서 받은 도메인으로 접근한 모습
400 Bad Request Your client has issued a malformed or illegal request. 라는 메시지
관리자 페이지에는 접근 할 수 없지만
연결된 도메인이 정상적으로 동작한다는 소리니 NAS, Transmission 등을 연결해주면된다
포트포워드 설정
![](https://blog.kakaocdn.net/dn/ILez8/btqCd0o31cA/hXZGs35EtcvaKETkH6PJhk/img.png)
고급설정 > NAT/라우터관리 > 포트포워드 설정 메뉴
포트포워드를 이용해서 raspberry pi 에 SSH 접근할 수 있게 되었다
관리자 페이지는 iptime.org 도메인을 사용해야 하지만
그 이외의 포트인 NAS, SVN, Transmission 등 접근할 수 있게된다
[내도메인.한국] 도메인 설정
![](https://blog.kakaocdn.net/dn/Lerwe/btqCbheOJSs/fPTha5x8k6MrFyRqkkSeNK/img.png)
할당받은 zelkun.ze.am 도메인 수정페이지
기본도메인을 쓰고 있어서 서브도메인(home)으로 연결 해놨다
도메인 수정 페이지에 별칭(CNAME)을 이용해서
iptime.org 도메인을 넣어주면 된다
마찬가지로 다른 공유기 DDNS도 저런식으로 연결해줄 수 있다
휴맥스 공유기 기본 DDNS는 dearmyrouter.net 라서 불편...
iptime 공유기는 iptime.org 라서 대충봐도 공유기로 보인다는 단점이였는데
위에 마스킹(?) 처리를 하나 더 해주면 누가봐도 공유기가 아니게된다
어짜피 내부적으로는 DDNS 도메인을 찾긴하지만...
관련글
[programing/Web] - apache2에 ssl 인증서 설정하기(sslforfree)
[programing/Web] - 무료 SSL인증서 발급(sslforfree)
[programing/Web] - [무료도메인]내도메인.한국
[programing/Web] - [무료도메인]내도메인.한국
이건 제가 하는 방법이고 아마존의 Route53 서비스를 가지고 하는 방법입니다.
먼저 아이피타임 공유기안에서 아이피타임 DDNS 가입해서 개통시킵니다. 그러면 DDNS 도메인이 하나 만들어집니다.
사실 이거 하나만으로 그냥 쓰셔도 됩니다. 다만 항상 "만드신도메인명.iptime.org" 주소이니까 좀 없어(?) 보이는거죠
(여기서는 clienuser.iptime.org 라 쓰겠습니다)
그래서 돈을 내고 공식 도메인을 아마존 Route53 서비스에서 하나 구입합니다.
저는 .net 도메인을 구입해서 생성비 11달러 들었습니다. (여기서는 예로 clienuser.net 이라 쓰겠습니다)
이걸 만드셨으면 Route53 서비스로 들어가서
![](https://cdn.clien.net/web/api/file/F01/9355520/53b3d1f83be743.png?w=780&h=30000)
레코드세트 생성으로 가서 CNAME 생성하시고 원하시는 서브도메인 (xxxx.clienuser.net) 을 DDNS 도메인과 연결해줍니다.
server.clienuser.net CNAME clienuser.iptime.org
이렇게만 해주면 저 서브도메인은 여러분의 공유기로 라우팅됩니다.
여기서 한가지 조심할것은 홈서버가 다이렉트로 인터넷으로 연결된것이 아니기때문에 공유기에서 홈서버로
포트포워딩을 해주셔야합니다. 다만 다른 장비가 같은 포트를 쓸수는 없으니까 잘 나누셔야합니다.
홈서버 (HTTP라고 가정하면 80포트) --- 포트포워딩 --- 공유기외부포트
이렇게 될텐데요 그런경우 홈서버의 80포트를 공유기의 외부포트 번호와 매치시키면 됩니다.
예를 들어 공유기 외부포트 8000번을 홈서버의 80포트로 연결했다면
외부에서 홈서버로 HTTP 접속은
http://server.clienuser.net:8000/경로
이렇게 하시면 됩니다.
Route53을 통해서 도메인서비스를 받는 비용은 DNS 쿼리 10억 건날아오면 백만건당 0.4 달러 정도입니다
제가 한달에 내는 비용이 1.4달러 정도입니다. 비용은 크게 문제가 되지 않으실겁니다.
서브도메인이란? (홈페이지 주소)
자신이 구입한 도메인이 MyDomain.com 이라고 한다면 여러개의 서브도메인을 추가할 수 있는데 메인 도메인 앞에 붙여 쓰는 것들을 서브도메인이라고 합니다. 대표적으로 www. 이 있습니다. 즉, www.mydomain.com 은 mydomain.com의 서브도메인이라는 것이죠. 그런데 인터넷이 처음 개발되던 때와는 달리 Word Wide Web(월드 와이드 웹)을 뜻하는 www와 메인도메인을 똑같은 취급을 하게 되어 보통은 어느한쪽으로 자동연결해줍니다.
요새 가장 많이 쓰는 서브도메인이라고 한다면 모바일 전용페이지일 건데요. 서브도메인을 m.MyDomain.com 처럼 앞에 m.을 많이들 붙이죠. 모바일이라고 꼭 m.인건 아니고 이건 자기 마음대로예요.
다국어 홈페이지의 경우 하위 카테고리로 언어를 구분하지 않고 별도 서브도메인으로 구분하는 경우도 있습니다.
영어페이지는 en.MyDomain.com
일본어 웹페이지용 서브도메인이라며 jp.MyDomain.com 이라고 할 수도 있겠죠.
물론 언어별 구분은 서브도메인 말고도 하위 카테고리나 쿼리 토큰등으로 해결할 수도 있기에 자주 보는 서브도메인은 아닙니다.
DNS 서비스 회사마다 서브도메인 갯수 제한은 있을 수 있습니다만 보통 수십개 만들진 않기때문에 별문제는 없을 겁니다만 정말 많은 수의 서브도메인을 만드는 경우를 흔하게 볼수 있는게 포털서비스 사이트입니다. 네이버, 티스토리 블로그의 경우 사용자마다 서브도메인을 부여합니다. 아래처럼 티스토리 사용자마다 자기 블로그 주소를 정해줄수 있는데 이때 서브도메인을 활용하죠.
- 티스토리: http://userID.tistory.com
- 네이버블로그: http://myID.blog.me
이런경우는 만들 수 있는 서브도메인 수가 많아야겠죠.
지난번 서브도메인과 DNS 글에서 언급하기로 검색엔진이 서브도메인과 메인도메인을 완전히 다른 사이트로 취급하는 이유도 이런것에 있을 것 같습니다. 티스토리의 모든 사용자의 블로그를 하나의 블로그로 취급해서는 안되겠죠. 또는 영어와 한글서브도메인 사이트는 서로다른 콘텐츠이기도 하고요.
DNS 설정에서 서브도메인 추가하기(고대디)
저는 고대디에서 도메인을 구매하고 DNS도 옮기지 않아서 고대디 홈페이지에서 서브도메인을 추가하는 방법을 기술 할 것이지만 이 것은 다른 DNS서비스에서도 방법은 똑같으니 참고하시길 바래요. 나중에 DNS를 옮기셔도 거기가서 똑같이 설정해두면 되는데요. 국내 도메인 판매업체 일부는 서브도메인을 추가하는데 비용을 받습니다.
우선은 GoDaddy 홈페이지에 로그인하고 자신의 메인도메인의 DNS관리 화면에 들어갑니다. 글을 좀 줄이기위해 거기부터 시작하겠습니다. 도메인 관리화면에 들어서면 아래같은 Records 테이블이 나옵니다.
![고대디 도메인 DNS 관리화면. A타입 레코드와 CNAME 레코드 타입이 있다](http://swiftcoding.org/wp-content/uploads/DNS-Records-godaddy.png)
위 스크린샷을 보면 레코드 중에 A타입의 이름(Name)이 @인것과 CNAME 타입의 이름이 www인게 기본으로 되어있습니다.
A타입과 CNAME타입 분류는 간단하게 말하자면 Value(값)에 목적지 IP주소를 넣어서 설정할거라면 A타입을, Value에 목적지로 URL(링크주소)을 넣어 설정하려면 CNAME을 택하면 되는 겁니다.
위 스크린샷에서 두 번째 빨간상자는 www라는 서브 도메인의 목적지 주소를 메인도메인의 축약어인 골뱅이(@) 기호를 넣은 겁니다.
www. 서브도메인으로 접속하면 무조건 메인도메인의 목적지와 같은 목적지를 향하게 해둔거죠.
참고: www.서브도메인을 메인도메인으로 마스킹해주지는 않습니다. 서버나 DNS에서 따로 리다이렉팅 마스킹을 설정하지 않았다면 접속자는 여전히 주소 앞에 www.을 보게 됩니다.
이쯤에서 눈치가 빠른 분이라면 저 표에 또다른 레코드를 추가하면 서브도메인을 추가하게 될거라는 걸 눈치채셨을 겁니다.
위의 DNS Record 관리화면에서 ADD 버튼을 클립합니다:
![ADD 버튼을 눌러서 DNS 레코드 추가한다](http://swiftcoding.org/wp-content/uploads/Adding-a-DNS-record.png)
그런다음 유형에서 A 또는 CNAME중 자신이 원하는 걸 추가합니다. 저는 지시방향을 IP로 입력할 것이므로 A타입을 선택했습니다.
![A타입(유형) 레코드 추가](http://swiftcoding.org/wp-content/uploads/adding-a-type-dns-record-for-subdomain.png)
이제 호스트(Name)는 서브도메인이 되고 지시방향(Value)는 연결해줄 IP주소가 됩니다.
TTL은 일단 짧게 30분으로 했습니다. 앞으로 짧은시간내에 지시방향을 바꿀일이 없다면 길게해두길 추천합니다.
그리고 이제 저장버튼을 누르면 서브도메인 추가가 끝나는 것입니다.
참고: 저장버튼이 활성화 되지 않는다면 자신의 웹브라우저에서 자바스크립트가 꺼져있는지 확인하세요.
호스트에 test를 입력했으므로 이제 아래처럼 서브도메인 주소로 접속하면 되는 것이죠.
http://test.MyDomain.com
이제 남은일은 DNS가 활성화될때까지 몇시간 기다리는 일입니다. 길게는 하루가 될 수도 있겠지만 수 시간 내로 접속이 될 겁니다.
. 웹 포워딩을 이용해 웹서버 운영하기
- 예를 들어, 회원님의 도메인이 mydomain.com 인 경우이고, www.mydomain.com (또는 mydomain.com)으로 웹서버 주소를 가지고 싶다고 가정합니다.
- 먼저, "호스트 IP(A) 관리" 메뉴에서 web.mydomain.com 에 대하여 IP주소를 지정합니다.
- 회원님의 컴퓨터에서 80포트가 아닌 다른 포트로 서버를 운영합니다. (예: 8080)
- 공유기를 사용한다면 공유기에서 해당포트 8080을 포트포워딩 설정(가상서버 또는 DMZ설정이라고도 합니다.)을 해야 합니다.
- 외부에서 웹으로 접근 시, IP주소로 웹서버가 운영되는지 확인하십시오. (예: http://1.2.3.4:8080) 그런 다음에 연결할 홈페이지 주소 (예: http://web.mydomain.com:8080) 로 서버가 운영되는 지를 확인합니다.
- 웹포워딩 설정에서, www.mydomain.com 과 mydomain.com 을 http://web.mydomain.com:8080으로 연결합니다. ("주소 숨김"으로 하셔도 됩니다.)
- 위와 같이 하는 이유는 같은 호스트이름으로는 웹포워딩을 할 수 없기 때문에, www.mydomain.com 을 web.mydomain.com:8080 으로 연결하는 것입니다.
- 회원님의 서버(web.mydomain.com)가 유동IP에서 운영된다면, 다이나믹 DNS로 IP주소를 업데이트하도록 합니다.
- 외부에서 www.mydoman.com 으로 치면, 회원님의 홈페이지가 잘 보일 것입니다.
사이트 포트번호 없이 접속할 수 있도록 하기 - 80포트를 리다이렉트
글 삭제는 안하지만 nginx등을 사용하여 리버스 프록시를 하자
예전에 처음 서버를 열었을 때 생각도 못했던 문제가 있었다. 웹 서버를 호스트할 때 자주 사용하는 8080
포트(1024 ~ 49151을 well-known port라고 하더라)를 https://example.com:8080 이런식으로 붙여야 됐던 것. 그리고 검색 후에 웹 브라우저의 기본 포트가 80
이므로 80으로 열면 되는구나! 하고 열었던 기억이 있다..
Linux 계열에서 1024 포트 밑으로는 root 계정이 아니면 사용할 수 없다. 따라서 sudo를 이용하여 열었어야 했는데, 이렇게 root계정으로 웹 서버를 열면 보안의 문제가 있다. 절대 권장하지 않는 방법이라는 걸 알고 찾은 것이 iptables를 이용하여 80포트를 8080포트로 포트포워딩
해주는 것이다. 즉, 80 포트로 들어오는 traffic을 8080포트로 redirect 시켜주는 것.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
이 명령어를 사용하면 된다. 8080 자리에는 자신의 서버에서 사용할 well-known port를 넣으면 되겠다. 확인해보려면
iptables -t nat -L
을 사용하면 된다.
간단히 옵션을 설명하면 -t nat
는 iptable에서 prerouting등을 관리하는 nat table을 지정. -A PREROUTING
는 새로운 prerouting 룰을 추가. -i eth0
는 인터페이스를 eth0로 지정(그냥 lan으로 연결됐을 때 정할 수 있는 이름 인듯?) -p tcp
은 프로토콜을 tcp로 지정. --dport 80
은 도착지포트 -j
는 패킷이 조건에 맞았을 때(80에 도착했을 때) 어떻게 처리할지를 결정하고, 뒤에 REDIRECT --to-port 8080
에 따라 8080포트로 리다이렉트하여 처리한다는 것 이다. 하나도 모르겠어서 이 문서 를 참고하였다. 어렵다...
쨌든 이런식으로 열어주고 서버를 8080포트로 열어본 후, 포트번호 없이 들어가면 잘 열린다.
포트포워딩(Port Forwarding)
현재 웹 서비스 실행한 것을 웹 브라우저에서 보려고 하면 :8080 을 뒤에 붙여줘야 한다.
이 포트 번호를 없애려면 어떻게 해야할까?
![](https://blog.kakaocdn.net/dn/Ck8kw/btryZHNdfuK/oQzKlJmFR6mnManiFgiuNK/img.png)
HTTP 요청에서 80포트가 기본 포트이기 때문에, 굳이 80을 쓰지 않아도 자동으로 연결된다.
포트 번호를 입력하지 않아도 자동으로 접속하기 위해,
80포트로 접속하면 8080으로 전달하는 포트포워딩을 해본다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
로컬 포트포워딩 (80들어오는 요청을 8080으로 포워딩)
iptables : 리눅스상에서 방화벽을 설정하는 도구
-t : 테이블을 지정하는 옵션. 설정하지 않으면 filter 테이블을 default 로 지정
-t nat : NAT 기능을 사용하겠다
NAT : Network Address Translation, ip와 port 등을 변환하는 역할,
실무에서 대부분 서비스는 클라이언트의 ip, port를 내부 프로그램으로 돌릴 때 NAT 테이블을 사용
-A : 새로운 규칙을 추가하는 것(append)
-A PREROUTING : 목적지가 결정되기전에 적용한다
PREROUTING : 패킷을 INPUT rule 로 보내기 전 ip 와 port를 변경하는 역할
-i : 새로운 규칙을 삽입(insert)
-i eth0 : Gateway의 eth0 인터페이스로 들어오는 패킷들에 적용한다
eth0 : 랜카드의 지정 번지, 이더넷카드 번호0번 이라는 뜻
-p TCP : TCP 프로토콜이면(protocol)
-dport 80 : 목적지(destination) 포트 번호(접속하려는 포트번호가 80번이면..)
-j : 방화벽을 지난 후 패킷을 어떻게 처리해야 할지(jump)
REDIRECT : ~~로 리다이렉트 처리
--to-port : 사용할 destination port
Tomcat 등 서버에서 80포트를 사용하려고 하면
sudo등을 사용해서 root계정으로 실행해야 80포트를 사용가능하다.
80포트를 사용할 필요가 있을 경우
OS에서 제공하는 iptables을 사용해서 80포트를 다른 포트로 리다이렉트 해야한다.
위 명령어로 설정해주면 80으로 들어오는 모든 패킷을 8080으로 리다이렉트 처리한다.
리버스 프록시로 비슷한 구성 설정 가능함
![](https://img.extrememanual.net/2015/08/nginx_title.jpg)