강좌하나 더 올려드리지요.

   조회 121685   추천 2    

전에 기본적인 공유기 설정과 vpn 서버 설정을 올려드린바 있습니다.
이번엔 3탄 간단한 로드밸런싱 설정 입니다.
간단하게
2개의 ISP 나 동일 ISP에서 제공하는 두개 회선으로 부터 공급받은 유동아이피로
5포트 미크로틱 장비를 이용하여 로드밸런싱을 하는 설정입니다.
1,2번포트로 유동 공인아이피를 받아서 3,4,5번 포트로 나눠쓰게 하는거고
특징은 특별한 끊김이 없는한 사용자가 늘어날때 마다 자동으로 1또는 2번으로 순차적으로 트래픽을 분산해주되 세션이 분산되는것은 아니고 사용자별 분산을 해주는 특별한 방식입니다.
만일 사용자별로 분산하지 않는경우 여러 위치로부터 이미지나 컨텐츠를 가져오는 웹페이지나 게임등의 서비스 사용이 원활치 못한것을 개선한것입니다.
 
/interface bridge

add l2mtu=1520 name=lan protocol-mode=rstp        
**** rstp를 지원하는 브릿지 인터페이스 를 lan 이라는 이름으로 생성

/ip pool

add name=dhcp_pool1 ranges=192.168.0.2-192.168.0.254  
**** 사용자에게 자동으로 할당할 아이피 풀 생성

/ip dhcp-server

add address-pool=dhcp_pool1 disabled=no interface=lan lease-time=3d name=dhcp1   
****dhcp1 라는 이름으로 사용자용 브릿지lan에 사용할 dhcp서버 생성

/interface bridge port

add bridge=lan interface=ether3  
add bridge=lan interface=ether4

add bridge=lan interface=ether5
****브릿지 인터페이스에 포트 3,4,5번 할당
/ip address
add address=192.168.0.1/24 interface=lan 
****브릿지 인터페이스에 랜용 게이트웨이인 192.168.0.1 할당

/ip dhcp-client

add add-default-route=no disabled=no interface=ether1 use-peer-dns=no use-peer-ntp=no
add add-default-route=no disabled=no interface=ether2 use-peer-dns=no use-peer-ntp=no

****포트 12에 유동아이피 받을 dhcp-client 설정 (gateway 제외)

/ip dhcp-server network

add address=192.168.0.0/24 dns-server=168.126.63.1 gateway=192.168.0.1  
****dhcp-server에서 사용할 사용자 네트워크 설정

/ip firewall mangle      
add action=mark-connection chain=input in-interface=ether1 new-connection-mark=ether1_conn

add action=mark-connection chain=input in-interface=ether2 new-connection-mark=ether2_conn

****포트1과2로 들어오는 컨낵션을 구분
add action=mark-routing chain=output connection-mark=ether1_conn new-routing-mark=to_ether1

add action=mark-routing chain=output connection-mark=ether2_conn new-routing-mark=to_ether2

****구분된 컨낵션을 각각 라우팅마크로 구분
add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=ether1_conn per-connection-classifier=src-address:2/0 src-address=192.168.0.2-192.168.0.254

add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=ether2_conn per-connection-classifier=src-address:2/1 src-address=192.168.0.2-192.168.0.254

****사용자가 사용할 사설대역과 위에서 구분된 라우팅 마크로 구분된 패킷연결을  다시 컨넥션 마크로 구분
add action=mark-routing chain=prerouting connection-mark=ether1_conn new-routing-mark=to_ether1 src-address=192.168.0.2-192.168.0.254

add action=mark-routing chain=prerouting connection-mark=ether2_conn new-routing-mark=to_ether2 src-address=192.168.0.2-192.168.0.254

****마아지막으로 위의 컨넥션 마크로 구분된 트래픽을 라우팅 마크로 구분.

 

/ip firewall nat

add action=masquerade chain=srcnat src-address=192.168.0.2-192.168.0.254  
add action=masquerade chain=srcnat out-interface=ether1  

add action=masquerade chain=srcnat out-interface=ether2

****좌우지간 기본 공유기 설정

/ip route

add check-gateway=ping distance=1 gateway=xxx.xxx.xxx.x%ether1 routing-mark=to_ether1 scope=255  
add check-gateway=ping distance=1 gateway=yyy.yyy.yyy.y%ether2 routing-mark=to_ether2 scope=255

****인터넷 게이트웨이와 이더넷포트 설정이며 여기서 중요한 점은 xxx.xxx.xxx.x ether1에서 dhcp-client 로 할당받은 아이피의 게이트웨이 주소이며,yyy.yyy.yyy.y ether2에서 dhcp-client 로 할당받은 아이피의 게이트웨이 주소 입니다. 만일 고정주소일경우 각각 해당하는 주소를 적어주면 되며, 동일 네트웍, 동일 서브넷상의 경우 게이트웨이가 같은 경우도 있습니다. 예를들어 LG오피스넷 의 경우 동일한 네트웍이라 할지라도 각각의 포트에서 트래픽이 분리되어 200메가를 모두 사용할수 있다고 합니다.  케이티 처럼 아이피 여러 개 기본으로 주는경우에는 불가능하지만 상품을 두개 쓰면 가능할지도 모르겠네요.

이상으로 설정한 결과,

1,2번에서 자동 할당받은 공인주소및 대역폭을 사용자들은 192.168.0.2~192.168.0.254 까지 3,4,5번포트를 통해 자동으로 할당하여 사용할수 있음.또한 사용자들은 균등하게 접속 순서대로 인터넷 포트 1번과 2번을 순차적으로 사용하게 되며, 설정이 완료된 후 유동공인 아이피 2회선은 포트 1,2에 연결하고 3,4,5번은 사용자용 스위치의 업링크와 연결한다.
 
 
-초인을 꿈꾸는 범부, 일탈을 꿈꾸는 생활인,깨어나기 두려우나 모든것이 꿈이기를 꿈꾸는 나비-
미크로틱 2013-05
추가로 혹시 네트워크 전문가 분들중 설명 잘하시는 분 계시면 저 위에 맹글 룰 설명좀 부탁드립니다.
아는거긴 한데 설명하려니 참..거시기해서요..쉽게 설명은 다른분께 패스합니다.
이태욱 2013-05
구글링하면서 삽질하다가
결국에는 효과를 보지 못해서 이미 1회선을 해지해버렸다지요... 음음..
http://aacable.wordpress.com/2011/07/27/mikrotik-dual-wan-load-balancing-using-pcc-method-complete-script-by-zaib/ 참고해서 했었습니다.

아래는 당시 설정 값..
참고하시면 될것 같아요..

/ip address
add address=192.168.88.1/24 network=192.168.88.0 broadcast=192.168.88.255 interface=Local
add address=192.168.1.2/24 network=192.168.1.0 broadcast=192.168.1.255 interface=ether9
add address=192.168.2.2/24 network=192.168.2.0 broadcast=192.168.2.255 interface=ether10
 
/ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=5000KiB max-udp-packet-size=512 servers=168.126.63.1,168.126.63.2
 
/ip firewall mangle
add chain=input in-interface=ether9 action=mark-connection new-connection-mark=ether9_conn
add chain=input in-interface=ether10 action=mark-connection new-connection-mark=ether10_conn
 
add chain=output connection-mark=ether9_conn action=mark-routing new-routing-mark=to_ether9
add chain=output connection-mark=ether10_conn action=mark-routing new-routing-mark=to_ether10
 
add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=Local
add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=Local
 
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection new-connection-mark=ether9_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection new-connection-mark=ether10_conn passthrough=yes
 
add chain=prerouting connection-mark=ether9_conn in-interface=Local action=mark-routing new-routing-mark=to_ether9
add chain=prerouting connection-mark=ether10_conn in-interface=Local action=mark-routing new-routing-mark=to_ether10
 
/ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_ether9 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-mark=to_ether10 check-gateway=ping
 
add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2 check-gateway=ping
 
/ip firewall nat
add chain=srcnat out-interface=ether9 action=masquerade
add chain=srcnat out-interface=ether10 action=masquerade
미크로틱 2013-05
태욱이 안녕.아마도 isp 두회선에 각각 먼저 공유기 달아서 거쳐나온거 같은데..별로 안좋아..일단 공유기가 후지면 미크로틱 단 의미가 없고....실패라고 표현한것이..로드밸런싱이 안된건 아닐거 같고..아마도 되는데..다중사용자가 아닌 환경이라 체감을 못했을거고... 내가 언급한대로 다중경로인 웹페이지나 게임등 컨넥션을 유지해야 하는 서비스에서..문제가 있는 설정인거 같어..
비밀은..
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection new-connection-mark=ether9_conn passthrough=yes
이부분에서.. per-connection-classifier=both-addresses-and-port 를 per-connection-classifier=src-addressfh 로 바꾼것..즉 내부 사용자 요청마다 하나의 구분을 지어준것이지.. 안그렇면 각각의 목적지와 내부 아이피 마다 그리고 포트 마다..전부 각각 관리하게 되니 분산은 확실히 되지만 세션을 유지해야 하는 서비스들은 쓰기 곤란할거 같아..
그리고 /ip route 부분에서 결국 아래 두줄은 못사용해..왜냐면 한 장비에 디폴트 라우팅은 한개만 가능한데 비해 태욱이가 한 설정상 아래 두줄이 충돌해.
그렇니 고치면 아래처럼 되는게 좋지..

/ip address
add address=192.168.88.1/24 network=192.168.88.0 broadcast=192.168.88.255 interface=Local
add address=192.168.1.2/24 network=192.168.1.0 broadcast=192.168.1.255 interface=ether9
add address=192.168.2.2/24 network=192.168.2.0 broadcast=192.168.2.255 interface=ether10
 
/ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=5000KiB max-udp-packet-size=512 servers=168.126.63.1,168.126.63.2
 
/ip firewall mangle
add chain=input in-interface=ether9 action=mark-connection new-connection-mark=ether9_conn
add chain=input in-interface=ether10 action=mark-connection new-connection-mark=ether10_conn
 
add chain=output connection-mark=ether9_conn action=mark-routing new-routing-mark=to_ether9
add chain=output connection-mark=ether10_conn action=mark-routing new-routing-mark=to_ether10
 
add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=Local
add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=Local
 
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=src-address:2/0 action=mark-connection new-connection-mark=ether9_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=src-address:2/1 action=mark-connection new-connection-mark=ether10_conn passthrough=yes
 
add chain=prerouting connection-mark=ether9_conn in-interface=Local action=mark-routing new-routing-mark=to_ether9
add chain=prerouting connection-mark=ether10_conn in-interface=Local action=mark-routing new-routing-mark=to_ether10
 
/ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_ether9 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-mark=to_ether10 check-gateway=ping
 
/ip firewall nat
add chain=srcnat out-interface=ether9 action=masquerade src-address=192.168.88.2~192.168.88.254
add chain=srcnat out-interface=ether10 action=masquerade src-address=192.168.88.2~192.168.88.254
     
이태욱 2013-05
역시 이런건 기업에서 써야하는게 맞는것 같아요..
가정에서는...ㅠ
좋은 지적 감사드립니다(__)
이해하면 2013-05
맛있게 촵촵.. 잘먹겠습니다.
김성진75 2013-05
좋은정보 감사합니다.
공유기를 바꿀때.
미크로틱제품으로 바꿔야종.. 2회선 사용하게요..^^
포시퓨 2013-05
감사합니다. 다시한번 도전해봐야겠네요
해보긴했으나 동작이 제대로 되는지  몰라서 그만뒀었는데 ^^
다람쥐v 2013-05
mangle 테이블의 룰 설명에 약간의 오류가 있는 것 같아서 정정 겸 간단한 설명 올려봅니다.

우선 input과 output 체인은 각각 dst와 src가 라우터 자신인 경우에만 패킷이 이 체인을 거치게 되고,
src가 다른 호스트인 경우 ouput 체인을 거치치 않고
dst가 다른 호스트인 경우 input 체인을 거치지 않게 됩니다.

firewall에서 conn track을 활성화한 경우에만 이 방화벽 룰을 사용할 수 있는데,
본래의 라우터는 패킷을 포워딩만 하지 특정 호스트 간에 어떤 패킷이 오가는데 그 패킷이 어떤 커넥션에 속하는지 구분하지 않습니다만,
conn track을 사용함으로써 라우터에서 처리하는 tcp나 udp 패킷들을 각각의 커넥션으로 분류해서 각 커넥션마다 필요한 처리를 해줄 수 있게 됩니다.

특히 NAT(PAT)가 활성화된 라우터에서 여러 호스트가 하나의 ip를 공유하면서
바깥쪽 호스트에서 들어오는 패킷들이 똑같은 dst ip주소를 갖고 있어도
그 패킷에 연관된 커넥션을 가진 호스트로 정확히 전달할 수 있는 건 이 conn track 덕분입니다.
각 패킷을 커넥션으로 분류할 수 있기 때문에 어떤 호스트와 형성된 커넥션에 속한 패킷인지 알 수 있기 때문입니다.

이 예제에서는 conn track을 활용해서 패킷이 연관되는 커넥션에 conn mark를 마킹할 것인데,
이 conn mark는 해당 커넥션에 한 번 마킹되면 그 커넥션이 유지되는 동안에는 마킹이 지워지지 않습니다.
이렇게 커넥션에 conn mark를 마킹하고 나면 각 conn mark마다 서로 다른 라우팅 테이블을 적용하기 위해서 routing mark를 마킹할 것입니다.

처음부터 routing mark를 마킹 하지 않고 굳이 conn mark를 마킹하고 나서 routing mark를 마킹하는 이유는,
어떤 패킷에 conn mark를 마킹하게 되면 자동적으로 그 커넥션에 속하는 모든 패킷들이 자동적으로 conn mark가 붙는데
A와 B 호스트 사이에 맺어진 커넥션에서 A가 B로 보낸 패킷 하나에 conn mark를 하게 되면
나중에 그 커넥션에서 A가 B로 보내는 패킷은 물론이고 B가 A로 보내는 패킷에도 자동적으로 conn mark가 붙게 되기 때문입니다.

/ip firewall mangle
add action=mark-connection chain=input in-interface=ether1 new-connection-mark=ether1_conn
add action=mark-connection chain=input in-interface=ether2 new-connection-mark=ether2_conn

add action=mark-routing chain=output connection-mark=ether1_conn new-routing-mark=to_ether1
add action=mark-routing chain=output connection-mark=ether2_conn new-routing-mark=to_ether2

우선 위 4개의 룰은 input과 output 체인이므로 라우터 자체에서 나가고 들어오는 패킷에 마킹을 하기 위한 것입니다.
다른 호스트로 포워딩할 패킷은 아래 룰에서 처리할 겁니다.

이 예제에서는 2개의 isp와 bgp 라우팅을 하여 multihoming을 한 것이 아니므로 isp A를 통해서 들어온 패킷에 답할 때 isp A를 통해 답해야 할 겁니다.
따라서 첫 2개의 룰에서는 라우터로 들어오는 패킷에 들어오는 인터페이스에 따라 conn mark를 마킹해주고,
나중에 답할 때 들어올 때 붙여준 conn mark에 따라 routing mark를 마킹해서 들어올 때 거쳤던 인터페이스를 통해 답하도록 하고 있습니다.

add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=ether1_conn per-connection-classifier=src-address:2/0 src-address=192.168.0.2-192.168.0.254
add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=ether2_conn per-connection-classifier=src-address:2/1 src-address=192.168.0.2-192.168.0.254

add action=mark-routing chain=prerouting connection-mark=ether1_conn new-routing-mark=to_ether1 src-address=192.168.0.2-192.168.0.254
add action=mark-routing chain=prerouting connection-mark=ether2_conn new-routing-mark=to_ether2 src-address=192.168.0.2-192.168.0.254

위 4개 룰은 라우터에서 들어가고 나가는 패킷이 아닌, 라우터를 거쳐 포워딩되는 패킷들을 처리하기 위한 것입니다.

prerouting 체인은 라우터에서 들어가고 나가는 패킷은 해당되지 않고, 포워딩하는 패킷들에만 적용되는데 이름 그대로 routing을 하기 전에 패킷들이 먼저 거치게 되는 체인입니다. 우리는 내부 호스트들이 바깥으로 라우팅 되기 전에 로드밸런싱 규칙을 부여할 것이므로 이 체인이 가장 적합한 시기가 되겠지요.

처음 2개의 룰은 192.168.0.2-254가 src인 경우, src 주소를 2개 그룹으로 나눠서 각각 다른 conn mark를 붙여주고 있습니다. per-connection-classifier, pcc는 해당 커넥션이 갖는 특성을 n개 부류로 나눠서 각 그룹에 다른 룰을 매칭시킬 때 사용합니다. 여기선 src-address:2/0과 2/1을 썼는데 이 말은 src 어드레스에 따라 커넥션을 2개 부류로 나누고 나뉜 부류는 각각 0번 1번 부류로 나뉘는데 0번은 ether1_conn을 마킹하고 1번은 ether2_conn을 마킹하겠다는 의미입니다.

그 다음 2개 룰은 conn mark에 따라 routing mark를 부여하는 룰입니다.

근데 사실 여기서 prerouting 체인에서 왜 conn mark를 먼저 마킹하고 그 다음 routing mark를 하는 건지 잘 알지는 못하겠습니다. pcc에서 같은 조건이면 계속 같은 그룹에 매칭되기 때문에 그냥 prerouting 체인에서 처음 두 룰에서 conn mark를 마킹하지 않고 바로 routing mark를 마킹하면 똑같이 동작하면서 방화벽 룰은 더 줄일 수 있을 거 같은데 직접 해본 건 아니라서 장담은 못하겠네요...
     
뮤노 2023-08
궁금했던 부분이 해소되었습니다.
좋은 내용 감사합니다.
김충구 2013-05
좋은강좌 감사드립니다 isp를 2개를 신청해서 셋팅해야겠군요.
전 아직 갈길이 멀었군요
김문형 2013-06
이진님에 강좌 탄력 받아서 저렴한 넘으로 다섯대 구입 했습니다.
물론 제가 쓸건 하나도 없습니다. 슬프지만 모두 납품 입니다.
좀 가격이 되는 장비를 팔아 드려야 하는데 병원이나 이런 곳이 워낙 짜서 말입니다. 된장.
4대는 병원쪽 (의료법인 한군데) 모두 들어가고 1대는 교회로 납품 들어가는데 딱 한대 가 이 강좌의
내용이 필요 합니다. 더불어 IPTIME에 듀얼 IP ( 외부회선의 IP를 내부의 PC에 할당 해 주는 방법 )
설정을 해야 하는데 흠. 시도 해 보고 안되면 Help 요청을 해야 것습니다.
아이피 2019-03
이제 배워가는 초보입니다.이해는 절대 안되지만 무작정 보구 잇네여  ㅜ ㅠ 긍대 미크로틱 기반으로 해야하는건가요??
글 쓰셨을 당시엔 괜찮았을듯한대요..지금은 미크로틱 ㅠㅜ쓰기 무서운대 말이져 ㅠㅜ  저 라우터 아니면 앙되는거에요??
새앙쥐 2020-03
13년도에 글을 올려주셨는지라 답해주실 수 있으실는지는 모르겠으나... 조언을 부탁드리고 싶어 한 번 댓글 달아봅니다.

http://2cpu.co.kr/QnA/746699
현재 시놀로지 NAS를 백업 및 미디어 서버로 운영해 외부의 지인들과 같이 사용 중입니다만, 인터넷 할당량 문제 때문에 두 개의 ISP 회선을 사용하려고 합니다.
기기들은 위 링크의 그림과 같이 구성할 것으로 구상 중이며, 라우터를 미크로틱의 hEX 시리즈 내지 RB4011iGS+RM 등을 사용할 생각입니다.
이 글에 써주신 강좌에서는 사용자를 구분해서 쓰는 회선을 할당해주는 것으로 보이는데, 이 방법이 현재 제 상황에서 쓰일 수 있을는지요?
만약 적용 가능하다 하더라도, 특정 유저의 사용이 트래픽을 크게 점유하는 경우 한 회선에만 트래픽이 많이 발생할 것으로 생각이 됩니다만, 혹시 사용자가 아닌 세션을 구분하는 방법도 있을지도 여쭈어보고 싶습니다.


제목Page 1/28
2017-07   512533   세벌쉭
2017-07   213794   세벌쉭
2013-07   129009   권희석
2013-12   122017   빠시온
2013-05   121686   MikroTik이진
2013-09   115049   stone92김경민
2013-06   113592   MikroTik이진
2013-12   111838   빠시온
2013-02   103480   스카이
2013-06   102194   황진우
2013-10   100851   죠짱
2013-10   99760   황진우
2013-10   97309   빠시온
2013-12   95996   빠시온
2013-09   95739   황진우
2013-06   95307   황진우
2016-07   92951   백만스물하나
2013-05   89471   황진우
2012-11   88243   두포리
2013-10   87956   죠짱