안녕하세요. 도정진입니다. 오늘은 UPNP 를 통해서 포트 포워딩을 하는 방법을 알아 보도록 하겠습니다.
0. 필요성
자취방에서 생활하고 있습니다. 그런데 포트포워딩을 하고 싶으나 포트포워딩을 못할 경우가 있습니다.
혹은 공유기 설정창 열기 귀찮을 때 사용하시면 됩니다.
예로써, 아래와 같습니다. 공유기를 통해 방마다 인터넷을 넣을때.. 이럴 때에는 상위에 있는 공유기를 먹지 않고서야 작업이 불가능합니다. (여기서 먹는다는 것은 ID / PW 를 설정되지 않은 공유기일때, 관리창에 들어가서 입맛대로 설정을 하고 비밀번호를 거는 작업.)
물론 이 방법이 모든 환경에 대응하는 것은 아닙니다. UPNP 데몬이 공유기나 스위치에서 돌지 않고 있거나 그 상위에 또 공유기가 있을 경우에는 작동하지 않을 수 있습니다.
아래의 그림을 보시면 이해가 가능합니다.
위의 경우에는 사용이 불가능 할 가능성이 높아집니다.
실제로 UPNP 를 통해 하위 공유기에서 넘어온 설정이 상위 공유기에도 설정이 되는것을 확인한 바 있습니다만, 위의 경우는 거의 실패하네요.
한편, UPNP 는 토렌트 , 게임 , 팟플레이어 등등에서 기본적으로 통신 포트를 열기 위해서 사용하는 데몬 / 클라이언트 입니다.
1. 윈도우 / 리눅스 (데스크톱 환경) UPNP PortMapper 사용
일단 UPNP PortMapper 는 자바 기반이라 윈도우에서 사용하실 경우 JAVA 설치가 필요합니다.
https://java.com/ko/download/windows-64bit.jsp
https://sourceforge.net/projects/upnp-portmapper/
실행을 하고 Connect 버튼을 통해서 연결 한 다음 입맛대로 포트 포워딩을 추가해 주시면 됩니다.
2. 리눅스 콘솔 환경
miniupnpc 패키지를 설치합니다.
root@u5pvr-debian:~# apt-get install miniupnpc
Reading package lists... Done
Building dependency tree
Reading state information... Done
miniupnpc is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 54 not upgraded.
root@u5pvr-debian:~#
그리고 아래와 같은 명령어로 포트 포워딩을 하실 수 있습니다.
upnpc -a [source_ip] [source_port] [external_port] [protocol]
root@u5pvr-debian:~# upnpc -a 192.168.0.12 22 22 TCP
upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
List of UPNP devices found on the network :
desc: http://192.168.0.200:1024/etc/linuxigd/gatedesc.xm
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
recv: Connection reset by peer
No valid UPNP Internet Gateway Device found.
root@u5pvr-debian:~#
그런데 환경에 따라서 못찾는 경우가 있습니다. 위에 보시면 192.168.0.200 에 물려 있는 무선 AP 용 (DHCP 꺼짐) 의 UPNP 데몬은 검색이 되지만 실질적인 192.168.0.1 의 데몬은 못찾는 경우가 있는데요. 그 경우는 아래와 같이 야매로 찾습니다.
상기 1번 방법에서 UPNP Port Mapper 를 동일 서브넷의 컴퓨터에서 실행시킵니다.
그럼 위의 기반으로 다시 명령을 실행해 봅니다.
Options:
-e description : set description for port mapping.
-6 : use ip v6 instead of ip v4.
-u url : bypass discovery process by providing the XML root description url.
-m address/interface : provide ip address (ip v4) or interface name (ip v4 or v6) to use for sending SSDP multicast packets.
-p path : use this path for MiniSSDPd socket.
공식 설명에는 서칭 작업을 하지 않고 URL 을 직접 지정하는 게 가능하다고 합니다.
upnpc -u [upnp_xml_url] -a [source_ip] [source_port] [external_port] [protocol]
결과적으로 아래와 같이 실행을 합니다.
root@u5pvr-debian:~# /usr/bin/upnpc -u http://192.168.0.1:59297/etc/linuxigd/gatedesc.xml -a 192.168.0.12 22 22 TCP
upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
upnpDiscover() error code=0
Found valid IGD : http://192.168.0.1:59297/etc/linuxigd/gateconnSCPD.ctl
Local LAN ip address : 192.168.0.12
ExternalIPAddress = 124.194.31.74
AddPortMapping(22335, 22, 192.168.0.12) failed with code 718 (ConflictInMappingEntry)
InternalIP:Port = 192.168.0.12:22
external 124.194.31.74:22 TCP is redirected to internal 192.168.0.12:22 (duration=0)
root@u5pvr-debian:~#
그럼 상기처럼 포트포워딩이 되었음을 알 수 있습니다.
혹시나 등록이 제대로 되었는지 UPNP PortMapper 로 확인을 해 봅니다. 아래와 같이 libminiupnpc 이름으로 등록이 되어 있습니다.
목록에서 삭제를 하려면 아래의 명령어를 사용하시면 됩니다. (포트포워딩 삭제)
root@u5pvr-debian:~# /usr/bin/upnpc -u http://192.168.0.1:59297/etc/linuxigd/gatedesc.xml -d 22 TCP
upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
upnpDiscover() error code=0
Found valid IGD : http://192.168.0.1:59297/etc/linuxigd/gateconnSCPD.ctl
Local LAN ip address : 192.168.0.12
UPNP_DeletePortMapping() returned : 0
root@u5pvr-debian:~#
3. 입력하기 귀찮으니 스크립트 작성
아래의 내용으로 스크립트를 작성하고 실행 권한을 준 다음 /usr/bin/ 같은 곳에 바로 실행이 가능하도록 복사합니다.
root@u5pvr-debian:~# nano /usr/local/bin/port
#!/bin/sh
local=`ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
/usr/bin/upnpc -u http://192.168.0.1:59297/etc/linuxigd/gatedesc.xml -a $local $1 $2 $3
#/usr/bin/upnpc -a $local $1 $2 $3
local 이라는 변수에 eth0 이더넷의 IP 주소가 들어갑니다. 경우에 따라서 수정해서 사용하시길 바랍니다. 그 아래 줄은 정상적으로 서칭이 될 경우에는 코멘트 처리된 부분을 사용하시고 정상적으로 서칭이 되지 않을때에는 코멘트 아웃된 부분처럼 지정해서 사용해주시길 바랍니다.
그럼 아래와 같이 쉽게 실행이 가능합니다.
port [internal_port] [external_port] [protocol]
root@u5pvr-debian:~# port 21 21 TCP
upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
upnpDiscover() error code=0
Found valid IGD : http://192.168.0.1:59297/etc/linuxigd/gateconnSCPD.ctl
Local LAN ip address : 192.168.0.12
ExternalIPAddress = 124.194.31.74
InternalIP:Port = 192.168.0.12:21
external 124.194.31.74:21 TCP is redirected to internal 192.168.0.12:21 (duration=0)
root@u5pvr-debian:~#
여기까지 글 마치도록 하겠습니다.
감사합니다.
'서버 > 리눅스 서버' 카테고리의 다른 글
DNSZI 네임서버 이전기.. (0) | 2017.11.08 |
---|---|
이때까지 리눅스 서버로 사용한 장비들 입니다. (8) | 2017.11.06 |
간이 리눅스 서버 / NAS : I5-4350U , 16GB 발열 해결하기 (0) | 2017.10.05 |
TVheadend External Grabber & Internal Grabber & EPG Reset (0) | 2017.10.05 |
SSH 터널링 사용하기(MyEnTunnel, SocksCap, Ki4a) - 방화벽 우회 (0) | 2017.09.18 |
댓글