이전에 미니PC를 이용해 개인 서버를 열었지만 이를 공유기에 연결하여 다른 데스크탑에서 내부망을 통한 접속만 가능한 상태이다.
이후 다른 서버를 열거나 할 때는 당연히 외부접속에 대한 허용이 필수적이며 이에 따른 설정 과정을 정리해보았다.
간단히 설명하자면 ipTIME을 이용해 여러 장치와 외부를 연결했다.
공유기 오른쪽에 192.168.0.x 는 내부망에서 각 기기마다 연결하기 위한 ip이다.
ipTIME을 사용중이라면 http://192.168.0.1 주소를 통해 로그인해서 현재 연결 상태를 확인할 수 있다.
192.168.0.2
↔ 192.168.0.7
위에 구조에서 나는 내부 장비인 thorp에 접속할 것이므로, 192.168.0.7
주소를 기억해야 한다.
외부망은 외부 네트워크로 공유기 왼쪽에 있는 ip는 공인ip로 다른 네트워크와 소통할 수 있는 출입구 역할을 한다.
즉, 외부에서 111.222.333.444
로 통신하면 내부망과 통신할 수 있다.
그렇다면
111.222.333.444
로 요청을 보내면 트래픽이 어디로 갈까?
당연히 아직은 갈 곳이 없다. 내부망에 어떤 장비로 보낼지 아직 정한게 없기 때문이다.
내부망과는 다르게 외부 ip는 누구나 접근할 수 있는 주소로 아주아주아주 소중히 다뤄야 한다.
위에서 말했듯이 외부에서 접근한다고 해도 어떤 내부망으로 접근할지 모르기에 외부에서 오는 트래픽을 특정 기기로 전달하기 위한 포트포워딩 설정이 필요하다.
111.222.333.444
↔ 192.168.0.1
↔ 192.168.0.7
와 같이 연결이 필요하다.해당 내용은 개인 서버 설정하기 글 마지막쯤에 정리 되어 있다.
간단히 요약하자면, 서버에서 접속하고자 하는 포트가 만약 8080이라면,8080에 대한 포트의 외부 접속을 허용해줘야 한다.
Ubuntu에서는 ufw(Uncomplicated Firewall)을 이용해 포트를 설정할 수 있다.
sudo ufw status
ufw:command not found
라고 뜬다면 설치를 해줘야 한다.sudo apt install ufw
만약 비활성화 되어 있으면sudo ufw enable
sudo ufw allow 8080/tcp
다른 포트를 바꾸고자 한다면 8080을 해당 포트로 바꾸고 명령어를 날리면 된다.Windows Defender 방화벽 기능을 이용해 포트를 연다.
인바운드 새 규칙 추가
인바운드 규칙은 외부에서 내부로 들어오는 트래픽을 제어하는 규칙을 말한다.
포트 규칙
포트를 열것이기 때문에 해당 포트에 대해 연다.
규칙 및 포트 입력
보통 HTTP(S)나 FTP 등이 TCP에 속한다.
열고자 하는 포트도 입력해야 한다.
모든 로컬 포트를 여는 것은 많은 것을 편하게 해주지만 많은 공격에 노출할 수 있게 해준다.
때문에 사용하고자 하는 포트에 대해서만 여는 것을 추천한다.
연결 허용
여기서 보안 연결만 허용에 있는 IPsec은 데이터를 보호하기 위한 프로토콜 모음으로 VPN과 같은 보안 통신을 설정할 때 사용한다.
반대로 이러한 설정이 안되어 있다면 그냥 연결 허용을 하자.
적용 상태 지정
네트워크 환경에 따라 규칙을 적용할 것인지 정하는 것인데 별다른 사항이 없다면 전부 체크하고 다음으로 넘긴다.
같은 내부망안에 다른 연결한 디바이스가 있다면 동일 네트워크에서 해당 포트가 외부로부터 열렸는지 확인할 수 있다.
telnet 192.168.0.7 8080
과 같이 자신의 내부망 해당 디바이스의 IP와 자신이 연 포트를 통해 해당 포트가 열렸는지 확인할 수 있다.
다른 디바이스에서 시도해봐야 알 수 있다.
공유기라고 썼지만 사실 라우터 기능을 한다면 이에 대한 설정을 해줘야 한다.
단순 공유기라고 썼지만, 자신의 집 환경에 따라 이게 달라진다. 월세방 같은 곳은 하나의 인터넷을 메인 라우터에서 여러 다른 라우터로 나누어지기에 이 2중 설정도 당연히 해줘야 한다.
일단 기본적으로 할 수 있는 포트포워딩에 대해 정리해보겠다.
위에서 말했듯이 외부에서 우리 네트워크로 접근하기 위해서는 공인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에서 제공하는 포트포워딩을 사용해보았다.
test.iptime.org
로 오는 트래픽을 어떤 내부IP로 보낼지이다.192.168.0.7
이므로 상태에 맞게 세팅한다.test.iptime.org:8080
으로 들어오는 트래픽을 설정한다.위 설정을 마치면 test.iptime.org:{외부포트} 로에 대한 요청은 localhost:{내부포트}로 넘어가게 된다.
일단 연결은 얼추 되었을 것이다.
하지만 이는 내 환경내에서의 과정이며, 이를 보는 이에 대한 환경이 어떻게 다를지 알 수 없다.
그렇다면 무작정 설정하는 것이 아닌 해당 환경이 맞는지에 대한 체크 후 그에 맞는 설정을 해야 한다.
지금 보면 도메인이 이쁘지가 않다(iptime.org라니..)
때문에 직접 도메인을 사서 도메인 매핑했다.
위에서 문제는 공유기에 대한 설정 즉, 포트포워딩 설정을 무조건 내부망에서 해야 하는 점이다.
외부에서 내 서버에 대한 포트 설정을 못한다는 말인데 이도 ipTIME에서 설정이 가능하다.