[Mikrotik] 외부에서 미크로틱 WebProxy로 홈 웹서버 연결하는 방법

Mikrotik RB4011 Series
Mikrotik RB4011 Series

시작하며

외부에서 홈서버의 웹서비스를 연결하고 싶은데 어떻게 할까 고민을 좀 하는중.

다재다능한 미크로틱 라우터(?) 이놈을 어떻게든 부려먹을 기회!

단순한 NAT 포트포워딩(dst-nat) 으로 라우터 Internet facing 포트를 뒷단 홈서버로 연결할까도 했는데,

그냥 연결하면 좀 심심하잖아. (응 잉여로워)

 

그래서 생각한 구성은 이렇다. DST-NAT + WebProxy 를 써보는 거다.

 

WebProxy를 이용한 네트웍 아키텍처

Network Flow
대충 이런 흐름을 태울 것이다

 

Mikrotik 장비로 WebProxy를 사용

Mikrotik RouterOS에서 제공하는 DST-NAT + WebProxy 를 이용하기전에 생각해보니.

WebProxy 를 이용해서 얻을 수 있는 내가 생각한 장점만 대충 요약을 하자면 다음과 같다.

 

  • WebCache 를 이용해 정적인 내용은 장비가 처리해 주어 웹서버의 부담이 줄어든다.
    • 다만 나의 미크로틱 장비는 RB4011 이라 내장 디스크가 코딱지 만하다는것. ㅋㅋ
    • 용량이 큰 USB 디스크를 연결할 수 있는 모델에서는 Cache를 이용하기 더 좋을 것이다.

  • hostname 을 웹프록시에서 필터링하는 단계를 거친다.
    • IP로 HTTP연결시 미크로틱이 이를 거부해주니까 웹서버의 부하가 줄어들 것이다.
    • hostname 으로 각기 다른 웹서버로 분기를 할 수 있도록 해준다.

  • WebProxy가 Mikrotik 내장 DNS를 통해 로드밸런서 역할을 하면서 이중화 구성이 가능해진다.
    • 홈서버에 뭔 이중화냐구? 혹시 모르잖아! ㅎㅎㅎ 난 고가용성을 지향한다는것!
    • 뒷단에 여차하면 다른 장비를 붙여버릴 수 도 있고.

등등등 있는 기능 굳이 안 써먹을 이유가 없잖은가.

 

시작해보자.

 

1. DST-NAT로 포트포워딩을 WebProxy 로 향하게 만들고.

> /ip firewall nat add chain=dstnat protocol=tcp dst-port=80 in-interface=ether1 action=dst-nat to-addresses=192.168.1.1 to-ports=8080 comment="Web Proxy port"
  1. NAT룰을 하나 추가 : /ip firewall nat add
  2. dstnat 체인으로 : chain=dstnat
  3. ether1 인터페이스를 통해 80 TCP 포트로 들어오는 연결을 : protocol=tcp dst-port=80 in-interface=ether1
  4. dst-nat 로 WebProxy(192.168.1.1:8080) 포트로 넣어요: action=dst-nat to-addresses=192.168.1.1 to-ports=8080

 

DST-nat를 설정한다
DST-nat를 설정한다

 

2. WebProxy를 설정한다. (난 캐쉬로 사용할 용량이 없음으로 캐쉬디스크 설정을 빼버렸다)

> /ip proxy set enable=yes port=8080 max-cache-size=none cache-on-disk=no
  1. WebProxy 를 활성화 하고 : /ip proxy set enable=yes
  2. 8080 포트로 : port=8080
  3. 캐쉬용량을 0로 하고 : max-cache-size=none
  4. 디스크에 캐쉬를 쓰지 말자고: cache-on-disk=no

8080을 Listening하자
8080을 Listening하자

 

3. WebProxy의 뒷단 역할을 할 DNS Hostname 과 Port를 설정한다.

   (도메인 사놓은거 있으면 Mikrotik IP로 Public DNS설정해 놓아야함)

> /ip proxy access add local-port=8080 dst-port=80 dst-host=www.test.com action=allow
  1. WebProxy 로 엑세스할 구성을 추가: /ip proxy access 
  2. WebProxy로 8080으로 들어오는 트래픽을: local-port=8080
  3. Mikrotik DNS에 Static으로 www.test.com 호스트네임에 80포트로 접근할때: dst-port=80 dst-host=www.test.com
  4. 접근을 허용한다 : action=allow

 

> /ip proxy access add local-port=8080 dst-port=80 action=deny
  1. 그외 다른 hostname 으로 들어오는 놈들은 모두 거부(Deny) 할꺼야.
  2. 순서적으로 Deny 가 가장 아래쪽에 오도록 해야 Deny가 역할을 제대로 할 것이다.

8080으로 들어오면 서버의 80포트로 전달하겠다!
8080으로 들어오면 서버의 80포트로 전달하겠다!

 

4. Static DNS설정으로 Round Robin방식으로 axgo.tistory.com  호스트를 로드 밸런싱하면 끝!

> /ip dns static add type=A ttl=30m name="axgo.tistory.com" address=192.168.1.200
> /ip dns static add type=A ttl=30m name="axgo.tistory.com" address=192.168.1.201
> /ip dns static add type=A ttl=30m name="axgo.tistory.com" address=192.168.1.202

Local 네트워크의 DNS 레코드를 생성하는 것이다
Local 네트워크의 DNS 레코드를 생성하는 것이다

 

마치며.

아직 WebProxy 를 통해 Sticky Session이나 커넥션 Hash 는 생각 안하련다. (아직은 뒷단 서버는 1대니까)

나중에 서버가 더 추가된다면 그때 WebProxy로 해결방법을 찾아봐야겠다.