티스토리 뷰

최근 VPN 서버를 만들일이 있어서 이것저것 세팅하다가 구글에 제대로 된 정보가 몇 없어서 다른 분들께 도움이 되고자 글을 남깁니다. Apache 웹 서버를 사용했습니다.


 

공유기 밑에 있는 내 서브넷의 외부에서 나의 웹 서버에 접속하려면 포트포워딩, 방화벽 등 손봐야 할 곳이 있다. 이걸 인터넷에 찾아보면 전부 서로 복사 붙여넣기한 글밖에 없고.. 좀 제대로 된 글은 몇 개 없다. (짜증.. 특히나 어린이들이 게임한다고 방만들 때? 많이 찾아볼 텐데.. 괜히 건드리면 안 될 것들을 건드리게 해 놓고.. 하는 등....)

 

 

일단, NAT나 공유기, 서브넷, 같은 원리는 알고 있다고 가정하겠습니다. 이걸 모르는 분들이 웹서버를 운영할 일은 없을테니까요.

 

그리고 꼭 웹서버가 아니어도 통신은 같은 원리로 되니까 끝까지 읽으시면 도움이 될 거라 생각합니다.

 

1. 시나리오

  (1) 웹 서버 구동 후 127.0.0.1로 접속해보기 (내 컴퓨터에서 내 컴퓨터 내부의 웹서버에 접속,)

  (2) 같은 서브넷의 다른 기기로 내 컴퓨터의 웹 서버에 접속

  (3) 공유기 바깥의 기기로 내 컴퓨터의 웹서버에 접속.

 

대부분 인터넷은 (3)번에 해당한다.

그래서 (3)번까지 하기 위해 한 단계씩 한 단계씩 올라가 보자.

아, 그리고 네트워크 관련은 그림을 그려 생각해보면 참 편하다.

 

2. 내 컴퓨터 내부의 웹서버에 접속

이 단계는 내 컴퓨터에서 내 컴퓨터의 프로그램으로 접속하는 경우이다. 당연히 그림 1처럼 데이터가 외부로 나가지도 않아 인터넷이 없어도 동작한다.

 

 

그림 1. 내부 요청(빨간색)

내 컴퓨터 그 자체를 가리키는 IP주소인 127.0.0.1을 브라우저에 입력해보자.

 

그림 2. 127.0.0.1을 입력하여 웹서버 접속

다시 한번 말하지만 웹서버를 켜놓은 컴퓨터에서만 127.0.0.1을 통해 접속 가능하다.

 

이번에는 127.0.0.1이 아닌 내 컴퓨터의 IP주소를 입력해서 들어가 보자.

 

 

그림 3. 내 IP주소

그림 3의 'IPv4 주소'는 내 IP주소이다. 이 IP주소는 내가 속해있는 서브넷에서의 IP주소이다. 서브넷 마스크가 255.255.255.0이기 때문에 192.168.35.x , ~255까지 존재할 수 있다. 다른 사람들도 SK 인터넷을 쓴다면 충분히 아니, 무조건 겹치기 때문에 애초에 모자이크조차 필요 없다. (서브넷 개념은 다른 훌륭하신 분들이 블로그에 설명해 놓으셨으니 참고 바랍니다:D )

 

여튼, 내 컴퓨터의 IP주소는 192.168.35.73이다. 따라서 이 주소를 브라우저에 입력해보자.

 

그림 4. 내 IP주소로 접속한 웹서버(서브넷 내)

역시 잘 동작한다. 위 그림 4와 같이 웹 브라우저에 자기자신의 IP주소를 입력하면 내부적으로 다음과 같이 동작한다고 생각할 수 있다.  L7계층에 HTTP 데이터, L4에는 TCP, L3에는 자기 자신의 IP주소를 담는다. 그런데 보니 자기 자신의 IP주소인 것! 그래서 패킷을 L2로 내려보내려 할 때, L3단에서 자기자신임을 깨닫고 다시 L4로 올리는 듯하다.

(자신에게 icmp packet을 보낼 때, Wireshark로 확인해보면 패킷이 캡쳐되지 않기 때문입니다! (host외부로 나가는게 없다))

 

 

(2) 같은 서브넷의 다른 기기로 내 컴퓨터의 웹 서버에 접속

이번엔 공유기에 연결된 휴대폰으로 접속을 해볼 것이다.

 

우선, 외부에서 내 컴퓨터로 접속하는 첫 번째 단계이다. 바로 위에서 IP주소를 입력하면 '기본 게이트웨이'란 곳에서 요청이 어디로 갈지 결정하는데(Router, 라우터 = 공유기) 내 컴퓨터의 IP주소 192.168.35.73을 입력하면 이 공유기가 그곳으로 요청을 전달해준다.

 

그런데, 내 컴퓨터에는 방화벽이란 게 있다.

외부에서 데이터가 들어오려면 이 방화벽을 통과해야 한다. 그래서 이 방화벽에 구멍을 열어줘야 하는데, 이 구멍을 포트(Port)라고 부른다.

 

Google에 몇 글을 보면.. 무슨 인바운드인지 아웃바운드인지, 포트를 계속 열어두는 아주 위험한 행동을 그냥 이렇게 하세요. 이런 식으로 적어놓은 걸 보면..... (사실 잘 되지도 않음)

그렇게 할 필요가 없다. 더군다나 그런 위험한 행동은 윈도우에서도 위험한 행동이라고 f1을 누르면 나오는 도움말에도 잘 나온다.

 

해당 프로그램이 필요로 할 때만 포트를 열어주면 된다.

그림 5. Win7 제어판

Win7기준으로 제어판 - 방화벽 관리하는 곳에 들어가서 

Windows 방화벽을 통해 프로그램 또는 기능 허용 이 곳으로 들어가면 된다. (그 밑에 'Windows 방화벽 설정 또는 해제' 여기서 포트를 열어주는 것은 필요가 없다.)

 

그림 6-1. Apache HTTP Server(웹서버) '허용'
그림 6-2 Win10에서 통신 허용(참고)

체크를 해주자.  Apache HTTP Server가 보이지 않으면 웹서버가 있는 경로의 httpd.exe로 설정해주자. (밑에 있는 '다른 프로그램 허용(R)...'을 통해서 할 수 있음.

그림 6-1의 장면은 Apache web server를 사용하는 경우입니다. 다른 웹서버를 사용한다면 해당 웹 서버의 실행파일을 등록해주어야 합니다.

그림 6-2는 단순히 Win10일 경우 어느 위치에서 설정을 해야할지 참고하기 위한 사진입니다.

 

 

 

이제 웹서버는 필요에 따라 방화벽을 통해 통신할 수 있다. Apache는 포트 80번을 사용하기 때문에 IP주소:80을 입력해도 되고 그냥 IP주소만 입력해도 된다.

 

그림 7. 같은 공유기(와이파이)를 쓰는 휴대폰에서의 접속

그림 7은 같은 공유기를 쓰는 휴대폰에서 접속한 화면이다. 주소에는 내 PC IP주소가 들어가 있다. 

 

 

그림 8. 같은 서브넷의 다른 기기로부터의 접속

그림 8과 같은 방식으로 데이터가 전달된다고 보면 되겠다. (파란색 화살표)

그림 5, 6처럼 방화벽에서 웹서버를 허용해주지 않으면 내 PC 안에 있는 웹 서버까지 데이터(패킷)가 도달하지 않는다.

 

 

(3) 공유기 바깥의 기기로 내 컴퓨터의 웹서버에 접속.

이제 외부에서 접속해 보자.

 

그림 9. 외부에서 접속하는 시나리오

그림 9는 외부(Mobile phone)에서 내 공유기 안의 내 PC의 웹 서버에 접속할 때의 네트워크 그림이다.

 

★NAT(Network Address Translation)은 알고 있다고 가정하겠습니다.

정말 간단하게 말하면 서브넷 쪽이 아닌 외부 인터넷 주소를 알아야 한다. 네이버에서 '내 아이피 주소 확인'으로 검색하면 나오는 아이피이다.( 왜 외부 아이피 주소를 알아야 하나?라는 의문이 생기신다면 NAT를 Google에 검색해보시기 바랍니다! :) )

 

그래서, 그림 9의 phone에서 내 PC의 외부 인터넷 주소를 입력하면 공유기에서 어디로 전달해주어야 할지 모른다.

그림 10과 같다.

그림 10. 패킷의 이동

파란색 선이 HTTP 요청이라고 하자.

내 공유기의 IP(외부)를 입력하고 공유기에 도착했다.

그런데 공유기는 이 패킷을 어디로, 즉, 어느 컴퓨터에게 줘야 할지 모른다(물론 그림에서는 1개밖에 없지만, 1개밖에 없다고 그 PC에게 주는 것은 아니다.)

 

NAT, 네트워크 주소 변환, 즉 외부 IP주소에서 내부 IP주소, 서브넷 내의 내 컴퓨터 주소로 바뀌어야 한다.

내 컴퓨터의 주소는 분명히 192.168.35.73이다.(그림 3 참조)

 

내 외부 IP주소는 다음과 같다.

그림 11. 내 외부 IP주소

외부 IP주소는 내 컴퓨터와 연결된 공유기로 들어가서도 확인할 수 있다.

 

외부에서 내 컴퓨터에 접속하기 위해서는 이 외부 IP 1.23x.xxx.xxx에서 192.168.35.73로 변경되어야 한다.

따라서 포트(Port) 넘버를 사용해서 이 아이피 주소를 연결시켜줘야 한다. 이거는 다른 거 다 필요 없고 포트 포워딩으로 해결한다. 

 

브라우저에 '게이트웨이 주소'를 입력해서 포트 포워딩 쪽으로 가자.

게이트웨이 주소는 cmd에 ipconfig를 입력하면 볼 수 있다. (공유기 회사별 로그인 정보는 다른 블로그를 찾아주세요!^^)

 

그림 12. 공유기 내 설정 (포트포워딩)

외부 포트 범위는 내 서브넷 쪽 포트가 아니고 외부 IP주소:외부 포트로 접속하면 내부 IP주소:내부 포트로 변환해주는 역할을 한다.

 

그래서 그냥 말 그대로 '규칙'이라서 내가 쓰고 싶은 포트 넘버를 쓰면 된다. 단, 다른 규칙들과 중복되면 안 된다. 

 

그림 12의 외부 포트 범위 9876은 내가 마음대로 정한 것.

내부 IP주소는  어떤 컴퓨터로, 이니까 내 컴퓨터 IP주소를, (다른 회사 공유기에는 없었던 항목인 거 같은데..)

내부 포트는 내가 쓰는 프로그램이 몇 번 포트를 사용하는지, (아파치 웹서버니까 80번)

프로토콜은 어떤 4 계층 프로토콜을 쓰는지, (TCP, UDP, TCP/UDP, 웹서버는 tcp)

설명은 그냥 내가 이름을 붙이는 것.

 

그림 13. LTE로 내 웹서버 접속

그림 11의 외부 IP주소를 입력하고 그림 12의 외부 포트 넘버를 이용해서 내 웹서버에 접속한 화면.

그림 10의 공유기가 어디로 보내주어야 할지 모르는 것을 포트 포워딩을 하여 결정할 수 있게 해 주었다.

 

LTE는 완전 다른 IP주소를 갖고 있다. Mobile IP계열에 대해 확실히 모르지만, 이 곳 근처의 기지국으로부터 IP를 할당받기 때문에, 꽤나 멀리 있는 IP주소이다. (앞자리부터 다름)

 

여튼 이런 방식으로 외부에서 접속할 수 있다.

부디 잘못된 정보로 인해 이상한 방화벽 옵션 건들지 말고 공유기 설정도 막 휘저어 놓지 말고 딱 필요한 부분만 설정해서 쓸 수 있으면 좋겠다.

전공자라면 막 안 건들겠지만, 방화벽 자체를 학부과정에서 물어보지 않는 한 잘 설명해주지는 않으니까.. 도움이 되었으면 좋겠습니다.

 

 

혹시 잘못된 부분이 있다면 댓글 부탁드립니다.

댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday