개인 서버 외부 접속 허용

김범준·2024년 10월 4일
0

개인서버

목록 보기
2/2
post-thumbnail

대충 그럴싸한 서론

이전에 미니PC를 이용해 개인 서버를 열었지만 이를 공유기에 연결하여 다른 데스크탑에서 내부망을 통한 접속만 가능한 상태이다.

이후 다른 서버를 열거나 할 때는 당연히 외부접속에 대한 허용이 필수적이며 이에 따른 설정 과정을 정리해보았다.

구조

간단히 설명하자면 ipTIME을 이용해 여러 장치와 외부를 연결했다.

내부망

공유기 오른쪽에 192.168.0.x 는 내부망에서 각 기기마다 연결하기 위한 ip이다.

ipTIME을 사용중이라면 http://192.168.0.1 주소를 통해 로그인해서 현재 연결 상태를 확인할 수 있다.

1. 내부망끼리는 내부망 주소를 통해서 통신이 가능하다.

  • ex) 192.168.0.2192.168.0.7
    단, 두 기기에서 사용하고자 하는 포트를 열고 해당 포트를 이용해 통신해야 한다.

2. 외부에서 내부망 주소를 쓴다고 접속할 수는 없다.

  • 당연하게도 외부에서 내부망 주소는 의미가 없다.
  • 대신, 내부에 어느 하나를 통해 내부에 다른 장비와 통신할 수도 있으니 아예 걱정을 놓으면 안된다.

3. 외부에서 특정 기기로 연결하기 위해서는 해당 내부망을 이용해야한다.

  • 보통은 외부에서 오는 트래픽을 포트포워딩하여 특정 기기로 연결할 수 있다.
  • 때문에 내부망에 대한 구조를 알고 표를 잘 짜야한다.

위에 구조에서 나는 내부 장비인 thorp에 접속할 것이므로, 192.168.0.7 주소를 기억해야 한다.

외부망

외부망은 외부 네트워크로 공유기 왼쪽에 있는 ip는 공인ip로 다른 네트워크와 소통할 수 있는 출입구 역할을 한다.

즉, 외부에서 111.222.333.444 로 통신하면 내부망과 통신할 수 있다.

그렇다면 111.222.333.444 로 요청을 보내면 트래픽이 어디로 갈까?
당연히 아직은 갈 곳이 없다. 내부망에 어떤 장비로 보낼지 아직 정한게 없기 때문이다.

1. 외부 ip는 꼭꼭 숨겨야 한다.

내부망과는 다르게 외부 ip는 누구나 접근할 수 있는 주소로 아주아주아주 소중히 다뤄야 한다.

2. 포트포워딩

위에서 말했듯이 외부에서 접근한다고 해도 어떤 내부망으로 접근할지 모르기에 외부에서 오는 트래픽을 특정 기기로 전달하기 위한 포트포워딩 설정이 필요하다.

  • 포트포워딩은 외부에 들어오는 트래픽을 내부망 특정 장치로 전달하는 기술이다. 보통 라우터나 방화벽에서 사용한다.
  • 지금 구조에서는 111.222.333.444192.168.0.1192.168.0.7 와 같이 연결이 필요하다.

접속 진행

  1. 접속하고자 하는 서버에서 포트 열기
    • 서버에서 사용하고자 하는 포트를 열어줘야 한다.
  2. 공유기 DDNS 설정 OR 고정 IP 설정하기
    • 공인IP를 모르게 되면 외부에서 접속할 수 없게 된다. 따라서 고정으로 알 수 있는 IP가 있어야 내부망까지 접속이 가능하다.
  3. 공유기 포트 포워딩 하기
    • 공유기에서 외부에서 오는 트래픽을 사용하고자 하는 서버IP에 해당 포트로 포트포워딩 해줘야 한다.

1. 서버 포트 열기

해당 내용은 개인 서버 설정하기 글 마지막쯤에 정리 되어 있다.
간단히 요약하자면, 서버에서 접속하고자 하는 포트가 만약 8080이라면,8080에 대한 포트의 외부 접속을 허용해줘야 한다.

Ubuntu 포트 열기

Ubuntu에서는 ufw(Uncomplicated Firewall)을 이용해 포트를 설정할 수 있다.

  1. ufw 상태 확인
    먼저 ufw가 활성화 되어 있는지 확인해야 한다.
    sudo ufw status
  2. ufw 설치 및 활성화(활성화 되어 있다면 skip)
    만약 위 명령어에서 ufw:command not found라고 뜬다면 설치를 해줘야 한다.
    sudo apt install ufw
    만약 비활성화 되어 있으면
    sudo ufw enable
  3. 포트 열기
    만약 tcp로 8080포트를 열고자 한다면
    	sudo ufw allow 8080/tcp
    다른 포트를 바꾸고자 한다면 8080을 해당 포트로 바꾸고 명령어를 날리면 된다.

Windows 포트 열기

Windows Defender 방화벽 기능을 이용해 포트를 연다.

  1. Windows Defender 실행
  1. 고급 설정
  1. 인바운드 새 규칙 추가
    인바운드 규칙은 외부에서 내부로 들어오는 트래픽을 제어하는 규칙을 말한다.

  2. 포트 규칙
    포트를 열것이기 때문에 해당 포트에 대해 연다.

  3. 규칙 및 포트 입력
    보통 HTTP(S)나 FTP 등이 TCP에 속한다.
    열고자 하는 포트도 입력해야 한다.

    모든 로컬 포트를 여는 것은 많은 것을 편하게 해주지만 많은 공격에 노출할 수 있게 해준다.
    때문에 사용하고자 하는 포트에 대해서만 여는 것을 추천한다.

  4. 연결 허용

    여기서 보안 연결만 허용에 있는 IPsec은 데이터를 보호하기 위한 프로토콜 모음으로 VPN과 같은 보안 통신을 설정할 때 사용한다.
    반대로 이러한 설정이 안되어 있다면 그냥 연결 허용을 하자.

  5. 적용 상태 지정
    네트워크 환경에 따라 규칙을 적용할 것인지 정하는 것인데 별다른 사항이 없다면 전부 체크하고 다음으로 넘긴다.

  1. 규칙 이름 및 설명 작성
    이후에 이 포트가 왜 열렸는지 등에 알기 쉽게 규칙 이름, 목적 등에 대해 작성해줘야 한다.

포트 확인

같은 내부망안에 다른 연결한 디바이스가 있다면 동일 네트워크에서 해당 포트가 외부로부터 열렸는지 확인할 수 있다.

telnet 192.168.0.7 8080

과 같이 자신의 내부망 해당 디바이스의 IP와 자신이 연 포트를 통해 해당 포트가 열렸는지 확인할 수 있다.
다른 디바이스에서 시도해봐야 알 수 있다.

공유기 설정

공유기라고 썼지만 사실 라우터 기능을 한다면 이에 대한 설정을 해줘야 한다.

단순 공유기라고 썼지만, 자신의 집 환경에 따라 이게 달라진다. 월세방 같은 곳은 하나의 인터넷을 메인 라우터에서 여러 다른 라우터로 나누어지기에 이 2중 설정도 당연히 해줘야 한다.

일단 기본적으로 할 수 있는 포트포워딩에 대해 정리해보겠다.

IP 고정

위에서 말했듯이 외부에서 우리 네트워크로 접근하기 위해서는 공인IP가 필요하고 이 IP가 동적으로 설정되어 있으면 일정 주기로 IP가 바뀌어 이를 알 방법이 없게 된다.
때문에 고정된 공인IP가 필요하고 이를 설정해주는 곳에 가서 이를 고정IP로 만들어야 한다.

하지만 몇몇 곳은 IP가 고정되면 충돌이 일어나거나 임대 기간이 지나 연결이 끊어질 수고 내가 그랬다..

때문에 ipTIME 공유기에 DDNS기능을 이용했다.
DDNS(Dynamic Domain Name System)은 동적 IP 주소를 사용하는 네트워크 환경에서 "고정된 도메인 이름"을 통해 접속할 수 있도록 해주는 기능이다.
여기서 "고정된 도메인 이름"은 굳이 IP가 아닌 도메인으로 접속할 수 있게 해주므로 해당 기능을 이용했다.

DDNS 설정하기

호스트이름에 들어가는 부분이 도메인이 된다.
사용자ID는 사용하는 Email로 작성하고 DDNS 등록한다.

예를 들어 호스트를 test 라고 작성했다고 가정하면

test.iptime.org가 도메인이 되고 이에 따른 요청 트래픽은 내부망에 공유기(192.168.0.1)로 넘어가게 된다.

포트 포워딩

192.168.0.1 은 해당 트래픽을 처리하는게 없다. 때문에 실제 디바이스로 포트포워딩 해야 하는데 마찬가지로 ipTIME에서 제공하는 포트포워딩을 사용해보았다.

  1. 규칙이름 : 해딩 포트포워딩 규칙에 대한 이름이다. 구분할 수 있는 이름으로 작성해주는 것이 좋다.
  2. 내부 IP주소 : 외부 test.iptime.org로 오는 트래픽을 어떤 내부IP로 보낼지이다.
    • 위에서 내가 보내고자 하는 디바이스의 내부IP는 192.168.0.7이므로 상태에 맞게 세팅한다.
  3. 프로토콜 : 마찬가지로 사용하고자 하는 프로토콜을 선택한다.
  4. 외부포트 : 외부 즉, 8080으로 세팅하면 test.iptime.org:8080으로 들어오는 트래픽을 설정한다.
    • 이는 8080 고정이 아닌 다른 것으로 해도 된다.
  5. 내부포트 : 외부에서 오는 트래픽을 내부 어떤 포트로 보낼지에 대한 설정이다.
    • 이는 내부에서 해당 트래픽을 처리하는 포트에 맞춰줘야 한다. 만약 서버를 8086으로 열었다면 8086으로 설정해야 한다.

위 설정을 마치면 test.iptime.org:{외부포트} 로에 대한 요청은 localhost:{내부포트}로 넘어가게 된다.

대충 그럴싸하게 마치며

일단 연결은 얼추 되었을 것이다.
하지만 이는 내 환경내에서의 과정이며, 이를 보는 이에 대한 환경이 어떻게 다를지 알 수 없다.
그렇다면 무작정 설정하는 것이 아닌 해당 환경이 맞는지에 대한 체크 후 그에 맞는 설정을 해야 한다.

가비아

지금 보면 도메인이 이쁘지가 않다(iptime.org라니..)
때문에 직접 도메인을 사서 도메인 매핑했다.

공유기/접속관리

위에서 문제는 공유기에 대한 설정 즉, 포트포워딩 설정을 무조건 내부망에서 해야 하는 점이다.
외부에서 내 서버에 대한 포트 설정을 못한다는 말인데 이도 ipTIME에서 설정이 가능하다.

  • 여기서 아주아주 조심해야 하는데 이 원격 관리 포트 사용은 외부에서 접속할 수 있기 때문에 이에 대한 처리가 아주 잘 이루어져야 한다.
    관리자 계정을 관리 해줘야 하는데 초기 admin/admin 등 노출된 계정은 사용하면 안되며 따로 설정해야한다.
profile
그럴싸한 계획을 가지고 있는

0개의 댓글