EdgeRouter - 포트포워딩(DNAT) 이슈 트러블슈팅

download at 2017-02-22T16:08:04Z origin

EdgeOS 포트 포워딩 위자드는 1.4 버전부터 가능합니다. 대부분의 설정 내역은 직접 포트포워딩을 하려면 적용해야합니다. (목적지 NAT)

인바운드 설정을 확인합니다

먼저, 라우터의 퍼블릭 IP 주소를 확인합니다. RFC1918 사설 주소를 사용하지 않도록 유의합니다. (사설 주소 대역 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) GUI의 대시보드 탭, CLI/SSH의 다음 명령어를 통해서 확인 가능합니다:

show interfaces
ubnt@ubnt:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
eth0 2.2.2.2/30 u/u Internet
eth1 192.168.1.1/24 u/D Local
eth2 192.168.2.1/24 u/D Local 2
lo 127.0.0.1/8 u/u

WAN 포트를 사용하여 사설 주소를 얻는ㄷ라면, 모뎀이 라우터모드에 사용중이거나 ISP가 사설 주소를 직접 부여하는 경우일 수 있습니다. ISP를 확인하여 모뎀을 브릿지 모드로 사용하도록 하여 퍼블릭 IP 주소를 부여받을 수 있는지 확인해야합니다.

퍼블릭 주소를 부여받을 수 있다면, 올바른 퍼블릭 IP 주소로 접근이 가능한지 확인해야합니다. DNS/DDNS로 포트 포워딩이 이루어진다면, 호스트에 핑을 수행하여 올바른 IP로 수행되는지 확인합니다.

일부 인터넷 커넥션의 경우에는 퍼블릭 IP주소를 사용하더라도 25 (SMTP), 80 (HTTP), 443 (HTTPS) 포트등과 같은 일반 포트로의 호스트 서비스를 허용하지 않을 수 있습니다. tcpdump 를 사용하여 패킷이 라우터에 도달할 수 있는지 확인하십시오.

 image0

예제에서는 8282 TCP 포트로 들어온 패킷을 사설 주소 192.168.1.39로 포워딩합니다. (Public:8282->192.168.1.39:8282.) forward-to port는 퍼블릭 포트를 다른 사설 포트 레이어에 포워딩할때 필요합니다. (8282 -> 443)

eth0 = WAN

eth1 = LAN 192.168.1.0/24

다음 명령어를 CLI에서 수행하고 포트 포워딩이 가능한지 확인합니다. (인터넷에서 수행합니다) 8282 포트를 다른 포트로도 변경해봅니다:

sudo tcpdump -nv -i eth0 not port 22 and port 8282

결과는 아래와 같이 출력됩니다:

ubnt@ubnt:~$ sudo tcpdump -nv -i eth0 not port 22 and port 8282
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
00:03:24.936592 IP (tos 0x0, ttl 128, id 23813, offset 0, flags [DF], proto TCP (6), length 52)
1.1.1.1.60386  2.2.2.2.8282: Flags [S], cksum 0x333f (correct), seq 1306542023, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
00:03:24.936928 IP (tos 0x0, ttl 128, id 23814, offset 0, flags [DF], proto TCP (6), length 52)
1.1.1.1.60387 > 2.2.2.2.8282: Flags [S], cksum 0xc46c (correct), seq 1879477362, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

위와 가은 결과를 얻을 수 없다면 ISP가 포트로 들어오는 패킷을 차단할 수도 있습니다. 다른 포트를 사용하거나 ISP 제공자에게 문의하십시오.

아웃바운드 연결 확인하기

LAN 인터페이스가 브릿지 인터페이스라면 포트포워딩을 로컬에서 사용할 수 있씁니다. 브릿지에 "promiscuous mode"를 추가 해야할 수도 있습니다.

configure
set interfaces bridge br0 promiscuous enable
commit
save
exit

패킷이 올바른 인터페이스를 통해 생성되는니 확인하십시오. 이 예제의 경우에는 eth1이며, 8282포트를 원하는 다른 포트로도 변경해보십시오.

sudo tcpdump -nv -i eth1 not port 22 and port 8282
ubnt@ubnt:~$ sudo tcpdump -nv -i eth1 not port 22 and port 8282
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
00:04:54.241129 IP (tos 0x0, ttl 127, id 25226, offset 0, flags [DF], proto TCP (6), length 52)
1.1.1.1.60703 > 192.168.1.39.8282: Flags [S], cksum 0xd41a (correct), seq 3153276637, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
00:04:54.241337 IP (tos 0x0, ttl 127, id 25227, offset 0, flags [DF], proto TCP (6), length 52)
 1.1.1.1.60704 > 192.168.1.39.8282: Flags [S], cksum 0xaecc (correct), seq 582872416, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
00:04:54.241506 IP (tos 0x0, ttl 127, id 25228, offset 0, flags [DF], proto TCP (6), length 52)

위와 같은 결과를 확인할 수 있어야 합니다.

확인할 수 없다면, "Auto Firewall" 기능이 Firewall/NAT-> Port Forwarding 에서 활성화 되었는지 확인하십시오.

호스트 확인하기

포워딩 되는 IP 주소(사설 장비/서비스)가 올바른지 확인하여 LAN 주소로 올바르게 접근할 수 있는지 확인하세요. 테스팅을 수행할 때 PC로의 소프트웨어 방화벽이 작동하지 않아야 할 것입니다. 또한 사설 호스트가 DHCP 내역을 미리 할당받아야 할 것입니다. 그렇지 않은 경우 다른 IP 주소로 포트 포워딩이 일어날 수도 있습니다.

사설 장비/서비스가 올바른 서브넷과 게이트웨이 세팅이 되었는지 확인하십시오. 포트포워딩 이슈의 대부분의 이유는 올바른 게이트웨이 설정이 주원인이었습니다.

마지막으로, 포트포워딩 패킷이 사설 장비로 잘 도달하는지 tcpdump, Wireshark를 통해서 확인해보십시오. 이 경우에는 192.168.1.39 (포워딩 되는 주소)가 airMAX 라디오 입니다. (HTTPS 포트가 8282로 변경된 서비스)

tcpdump -nv -i br0 not port 22 and port 8282
XM.v5.6-beta4.22359.140521.1845# tcpdump -nv -i br0 not port 22 and port 8282
tcpdump: listening on br0, link-type EN10MB (Ethernet), capture size 96 bytes
20:35:01.983186 IP (tos 0x0, ttl 127, id 19923, offset 0, flags [DF], proto TCP (6), length 52) 1.1.1.1.4059 > 192.168.1.39.8282: S, cksum 0x73ce (correct), 376443378:376443378(0) win 8192 <mss 1460,nop,wscale 8,nop,nop,sackOK>
20:35:02.169364 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.39.8282 > 1.1.1.1.4059: S, cksum 0x8841 (correct), 614060057:614060057(0) ack 376443379 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 1>