온라인저지 서버를 오픈소스를 통해 구축하였고,
이를 사용자에게 제공하기위해
- 외부에서 Http를 통해 접근할 수 있도록 설정하고
- ip주소 대신 웹 페이지 주소로 접근할 수 있도록 설정하려고 한다.
인터넷을 사용하기 위해서는 공인ip
(고유한 값)가 필요하다.
공인 ip는 고유한 값 이므로 모든 장비에 할당하기에는 부족하다.
그래서 공유기를 통해 네트워크를 각 기기에 분배하게 된다.
공유기에 연결된 각 기기(컴퓨터, 휴대폰,..)를 사설ip
주소로 구분하게 된다.
인터넷이 연결 된 기기 중 컴퓨터 1번을 서버 컴퓨터로 사용한다고 가정해본다.
이 컴퓨터에 다른 사람들이 http
웹 서버 80번 포트로 접근을 하고자 한다면
컴퓨터 1번의 사설ip
는 중복되기 때문에 외부에서는 접근할 수 있는 방법이 없다.
따라서 우리는 고유한 주소인 공인ip
를 통해 컴퓨터 1번에 접근할 수 있도록 연결해주어야 한다.
이렇게 연결해 주는 것이 바로 포트포워딩(port forwarding)
이다.
$ curl ifconfig.me
우리는 http 프로토콜을 통해 80번 포트로 들어오는 인터넷을
컴퓨터 1번의 80번 포트로 연결해주고자 한다.
보안 상의 이유로 포트번호를 임의로 지정하기도 하지만,
일단 그대로 80번을 사용해보고자 한다.
$ su
입력 후, 패스워드를 쳐 주면 된다.
# iptables -t nat -L --line-numbers
현재 설정되어있는 상태를 확인할 수 있다.
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 80
# iptables -t nat -D PREROUTING {num 숫자}
--line-numbers
옵션을 주고 조회를 하면 num
값이 나오게 되는데
이 때의 번호로 삭제해주면 된다.
iptables 유지 패키지 설치
# sudo apt install iptables-persistent
현재 iptables 상태 저장
# sudo netfilter-persistent save
사용자가 노출이 쉽고 접근성이 떨어지는 ip주소 말고
naver.com
과 같은 편한 영문 주소로 접근할 수 있도록 하기 위해서
고유의 도메인을 구입해야한다.
여러 호스팅 페이지가 있을텐데,
그 중 사용자가 많다는 호스팅케이알(HK) 에서 구입을 하였다.
내가 쓰고 싶은 도메인 이름이 사용할 수 있는지 검색을 한 번 해본다.
abc
라는 이름을 쓰고 싶다고 한다면
아래와 같이 사용가능한 주소와 이미 사용 중인 주소가 나올 것이다.
가격을 비교해보고 원하는 도메인을 선택하면 된다.
단, 각 도메인 별로 주의사항이 존재하기도 한다.
예를들면 비영리 목적으로만 사용해야 한다던지...
원하는 도메인을 골랐으면 결제해주면 된다.
관리하려면 회원가입은 필수..!
아래에 예시를 들기 위해 abc.re.kr
를 샀다고 가정해보자.
나의 서비스
> 도메인 관리
에 접속네임서버/DNS
탭 클릭DNS 레코드 관리
> 새 DNS 레코드 추가
ip 주소 입력
ip주소로 지정해주려면 유형은 A 그대로 두면 된다.
이름에는 abc.re.kr
앞에 붙을 이름을 설정해 주는 것이다.
즉, onlinejudge
라고 작성을 하면 onlinejudge.abc.re.kr
로 접속을 할 수 있게 된다.
값에는 지금 내가 사용하고 있는 컴퓨터의 공인 ip
주소를 작성해주면 된다. (1.3 에서 명령어를 통해 확인한 그 ip주소!)
아까 포트포워딩을 해 줬으니까 80번 포트로 들어오면 judge 데몬이 돌아가고 있는 컴퓨터의 80번 포트로 연결해 줄 것이다.
저장을 해 주면 끝!!! 1분 정도 기다리면 적용이 된다.
ip주소를 입력하면 기본 게이트웨이에서 요청을 어느 곳으로 보낼 지 결정하게 된다.
이 때 외부 데이터가 들어오려면 그 포트의 방화벽을 열어주어야 한다.
$ sudo ufw enable
$ sudo ufw allow 80
어느 ip에서든(anywhere) 접속 할 수 있도록 한다.
$ sudo ufw status
이제 끝!!
외부환경에서 우리가 구축해 놓은 온라인 저지 서버가 접속이 잘 될것이다!
여기에서는 http://onlinejudge.abc.re.kr 로 접속이 가능하단 소리다!
어디에서나!