지난 시간에 무선 통신 사업자망에서의 HTTP 302 Redirection을 이용한 Hot-Lining 사례를 소개해 드렸었는데요.
오늘은 HTTP 302 Redirection 로직에 대해서 좀 더 자세히 알아 보는 시간을 가지도록 하겠습니다.
Hot-Lining Rule 설정
지난 시간 설명과 같이 Hot-Lining은 사용자의 트래픽을 사업자가 의도한 곳 즉, Captive Portal로 그 목적지를 변경하는 행위이며, 이를 위해 Hot-Lining Device(P-GW, DPI, AP, APC 등의 장비)에는 다음과 같은 룰이 설정되어야 합니다.
참고: P-GW나 DPI는 하드웨어 기반으로 Hot-Lining을 수행하고, AP나 APC는 소프트웨어 기반으로 이 기능을 수행합니다.
[1] Pass Condition
[2] HTTP 302 Redirection Condition
[3] Drop Condition
LTE는 해당 사항이 없지만 만약 Wi-Fi 망에서 External DHCP 서버를 운영하는 경우, 단말이 IP 주소를 받아와야 HTTP 패킷을 보낼 수 있으므로 이 경우 DHCP 패킷(UDP Source Port # = 68, UDP Destination Port # = 67)에 대해서도 Pass Condition에 넣어 주어야 합니다.
Hot-Lining Call Flow
전형적인 Hot-Lining 흐름의 예입니다.
무선망 접속 후 사용자는 웹브라우저를 통해 www.naver.com에 접속하려 합니다.
[1] 단말은 DNS Query를 통해 www.naver.com의 IP 주소 20.1.1.1을 알게 되고,
[2] 20.1.1.1과 80 포트로 TCP 연결을 합니다. (TCP 3-Way Handshake)
[3] 그런 후 www.naver.com으로 HTTP GET 메시지를 보내는데, 이 패킷을 수신한 Hot-Lining Device는 Location 필드에 portal.lguplus.com을 담아 단말로 HTTP 302 Found 메시지로 응답합니다. 이 응답 메시지의 Source IP 주소는 20.1.1.1입니다. 마치 www.naver.com이 단말로 HTTP 302 Found 메시지를 보낸 것처럼 위장을 하는 것이지요.
[4] 단말은 20.1.1.1과의 80 포트 TCP 연결을 해제합니다.
[5] 그리고 DNS Query를 통해 portal.lguplus.com의 IP 주소 10.1.1.1을 알게 되고,
[6] 10.1.1.1과 80 포트로 TCP 연결을 합니다. (TCP 3-Way Handshake)
[7] 그리고 portal.lguplus.com에 접속되게 됩니다.
결국 [3]번 과정에서 Hot-Lining Device는 portal.lguplus.com외의 접속은 허용하지 않게 되므로 결과적으로 사용자는 사업자가 지정한 곳(Captive Portal) 외에는 접속이 불가능하게 됩니다.
아래는 위 그림에 [3]번 절차인 HTTP 302 Redirection 메시지 예제 입니다.
7. HTTP GET
Internet Protocol Version 4, Src: 1.1.1.1 (1.1.1.1), Dst: 20.1.1.1 (20.1.1.1) Transmission Control Protocol, Src Port: 57895 (57895), Dst Port: http (80) Hypertext Transfer Protocol GET / HTTP/1.1 [Expert Info (Chat/Sequence): GET / HTTP/1.1] Request Method: GET Request URI: / Request Version: HTTP/1.1 Host: www.naver.com |
8. HTTP 302 Found
Internet Protocol Version 4, Src: 20.1.1.1 (20.1.1.1), Dst: 1.1.1.1 (1.1.1.1) Transmission Control Protocol, Src Port: http (80), Dst Port: 57895 (57895) Hypertext Transfer Protocol HTTP/1.1 302 FOUND [Expert Info (Chat/Sequence): HTTP/1.1 302 FOUND] Request Version: HTTP/1.1 Status Code: 302 Response Phrase: FOUND Location: http://portal.lguplus.com |
이론적으로는 궁금이님 말씀이 맞습니다.
6번, 7번 과정에서 TCP sequence #가 증가하였으므로 (근데 이를 20.1.1.1 서버는 모르고 있구요),
따라서 8번 9번 과정에서 Hot-Lining device가 sequence #를 조절해 주어야 합니다.
만약 그렇게 안하면 단말과 서버(20.1.1.1) 양쪽에 TCP session이 끊기지 못하고 일정 시간 동안 garbage state가 남아 있을 것으로 생각이 듭니다.
이제 현실의 구현을 살펴 보면요.
AP 벤더(국내 벤더) 한곳, DPI 벤더(외산 벤더) 한곳에 확인 결과 sequence #를 변경하지 않는다고 하네요.
그 이유는 이를 위해서 TCP session을 일일히 관리 해야 하는데 이 구현이 복잡하다고 합니다.
내용이 너무 좋네요
궁금한게 있는데 AP 단에서는 hotlining을 하기 위해서
소프트웨어로 구현하신다고 하셨는데, 만약 hotlining을 구현하려면
직접 AP를 이용해서 소프트웨어적으로 구현을 해야하나요???
아니면 hotlining을 지원하는 AP가 따로 있는 건가요???