Dynagen/Dynamips 를 이용한 Router 12대 운영
작성자
SkullQ@Agidarigogidaridunsopungida.net
왜 문서를 작성하게 되었나?
1년전에 난 이곳에 Dynamips라는 위대한 물건을 소개한 적이 있었다. 그런데 지금와서 그게 뜨고있다. 조금은 속상하고 이 좋은물건을 왜 몰라볼까 하는 생각도 들었지만.. 지금이라도 늦지 않았다 생각하며 이 글을 적어나간다.
건 1년정도 Dynagen과 Dynamips를 운영하고 테스트를 해왔었다.
Cisco내부에서는 IOU라는 솔라리스에서 실행가능하고 마음대로 인터페이스를 만들수 있는 파일을 내부적으로 사용하고 고객들의 trouble shooting을 하고 있다. 처음엔 너무나 가슴아프고 꼭 갖고 싶었던 것이였지만 이젠 그럴 필요는 없을거 같다.
현재 본인은 노트북에 이놈들을 깔고 다닌다.. 사양의 압박상 3개정도의 인스턴스밖에 올리지 못하지만.. 뭐든 다 한다...
멋지지 않은가? 내가 했으니 여러분도 하라는 말은 하지 않겠다.. 왜냐하면 이미 여러분들도 그렇게 하고 있을거라 생각하기 때문이다.
시스템 사양
Xeon DualCore 3Ghz
4GB 메모리중 1.7기가 정도 사용 (2기가정도면 떡침)
Windows 2003
2GB의 paging 파일사이즈 (가끔 예전에 문제가 된적이 있어서 사이즈를 적당하게 늘려줍니다.)
메모리가 어떻게 쓰이나?
32bit 환경에서 윈도우는 하나의 프로세서가 핸들링 할수있는 메모리의 사이즈가 2GB이고 Linux는 3GB이다.
메모리라 함은 우리가 알고있는 RAM이 기본적이지만 paging에 사용하는 파일도 또한 메모리로 인식을 한다.
보통 dynamips를 이용해서 256MB의 ios를 에뮬레이션 할때 메모리 충분히 많더라도 3개정도의 인스턴스밖에 사용을 하지 못한다.
dynamips는 mmap을 이용해서 cache를 하는 파일 즉 ram파일또한 메모리로 인식하기 때문에 두배의 메모리를 사용하게 된다.
즉 (256MB + JIT Cache 16M) * 3개의 인스턴스메모리 * 3개의 cache메모리 = 1.632GB 의 메모리를 사용하게 된다.
그래서 하나의 인스턴스를 더 실행할수가 없게된다.
mmap()
True와 False를 잘 구분해야 한다.
기본적으로 True이며 workdir에 끝부분이 ram이라는 파일이 생성이 된다. 이 파일은 ram사이즈와 똑같은 크기이며 캐슁을 위해서 사용되게 된다. 만약 메모리가 부족한 시스템에서 사용을 하게된다면 True를 설정해서 부족한 메모리부분을 file로 대신할수가 있다.
하지만 속도나 성능은 약간 감안을 해야할것이다.
메모리가 많은 시스템은 당연히 False로 설정을 해서 메모리에서 모든일이 가능하도록 해주는게 좋다.
두개의 옵션을 구분하려면 dynamips를 실행할때 작업관리자를 열여놓고 메모리가 증가되는그림을 보면 이해하기 쉬울것이다.
두개이상의 서버운영
dynagen을 실행할때 바탕화면에 Dynamips Server라는 .bat파일을 실행하게 될것이다.
잠깐 그 파일내용을 보면 아래와 같다.
@echo off
rem Launch a local copy of dynamips
start /belownormal /B /wait "Dynamips" "dynamips.exe" -H 7200
pause
똑같은 파일을 생성해주되 포트를 다르게 설정해주고 아래의 12개라우터 설정과 같이 하면 된다.
@echo off
rem Launch a local copy of dynamips
start /belownormal /B /wait "Dynamips" "dynamips.exe" -H 7201
pause
TIP/TIP/TIP
0. dynamips가 죽는 이유는 메모리문제다. 제대로 메모리계산을 하지 않거나 적당한 IOS를 고르지 못했기 때문에 그런문제가 발생한다. 메모리에 대한 문제는 위에서도 언급을 했듯이 잘 계산하고 적당한 IOS를 골라서 테스트하길 권장한다.
0.1 ios마다 idlepc값이 다르다는건 잘 알것이다. 처음 .net파일을 작성할때 idlepc값을 지정하지 말고 실행을 하는데 autostart = false로 설정하고 라우터 한대만 실행하고 CLI상태에서 idlepc get [router] 로 하나의 idlepc값을 가져다가 전체에 적용해서 사용하면 손쉽게 idlepc값을 적용할수가 있다.
1. 256MB의 IOS는 192MB로 128MB는 96MB로 설정해서 사용해도 무관하다.
1.1 128메가를 권장하는 이미지를 64메가로 돌리려는 우매한 행동은 하지 말도록 하자. 분명 죽게된다. 그럼 속도가 느려지는가? 절대 그럴일은 없다.. 그냥 죽는다... 운이좋아서 된다면 그런 이미지는 널리 알려서 메모리가 부족한 사람들에게 널리 이롭게 해야 할것이다.
2. IOS는 꼭 압축을 풀어서 사용하기를 권장한다.
3. 랩이 끝나고 나면 서버를 죽였다 살려주는 버릇을 들이자.. 가끔 오동작 하는 경우가 있었다.
4. 현재 CDP관련한 버그가 있다. reporting을 하긴 해야하는데... 3600이나 2600시리즈에서 NM-16ESW를 이용해서 스위치를 구성시 두대를 server 모드로 올려서 설정할때 문제가 있으므로 참고하기 바란다.
5. 만약 스위치로 사용을 하려면 vlan 정보가 flash에 저장이 되어야 한다... 하지만 저장이 안될것이다. 간단하게 erase flash를 한번 해주고 나서 vlan을 추가하면 아주 잘~~ 된다.
6. vlan을 만들려면 옛날방식처럼 vlan database로 들어가서 설정을 해야한다.
7. 왜 당신들은 7200만 옹호하는가 7200은 Easy VPN이 지원되지 않는다 3600/2600은 가능하다.. 또 SSLVPN이나 CME, SDM도 정말 잘~ 동작한다. 라우터가 없어서 POE스위치 vlan을 나눠서 PC를 이용해서 테스트해보니 잘 되었다. 또한 라우팅만을 위한 테스트를 하고자 원한다면 7200용 12.2S나 12.0S와 같은 Service Provider버전을 사용하기를 권장한다. 작으면서 최고로 안정적이다.
8. 생각나면 계속 추가하겠다. --;
============= 12대를 위한 설정 ===================
model = 3660
ghostios = False
autostart = False
[localhost]
udp = 20000
port = 7200
[[3660]]
image = C:\test\santafe\c3660-js-mz.124-12.bin
ram = 96
slot1 = NM-4T
disk0 = 64
nvram = 256
idlepc = 0x605739d4
mmap = False
[[ROUTER r1]]
console = 10001
s1/0 = fw 1
[[ROUTER r2]]
console = 10002
s1/0 = fw 2
[[ROUTER r3]]
console = 10003
s1/0 = fw 3
[[ROUTER r4]]
console = 10004
s1/0 = fw 4
[[ROUTER r5]]
console = 10005
s1/0 = fw 5
[[ROUTER r6]]
console = 10006
s1/0 = fw 6
[localhost:7201]
udp = 21000
port = 7201
[[3660]]
image = C:\test\santafe\c3660-js-mz.124-12.bin
ram = 96
disk0 = 64
nvram = 256
idlepc = 0x605739d4
mmap = False
[[ROUTER sw1]]
console = 10007
slot1 = NM-16ESW
f0/0 = sw3 f0/0
f1/0 = r1 f0/0
f1/1 = r2 f0/0
f1/2 = r3 f0/0
f1/3 = r4 f0/0
f1/4 = r5 f0/0
f1/5 = r6 f0/0
f1/6 = bb1 f0/0
f1/7 = bb23 f0/0
f1/14 = sw2 f1/14
f1/15 = sw2 f1/15
[[ROUTER sw2]]
console = 10008
slot1 = NM-16ESW
f0/0 = sw4 f0/0
f1/0 = r1 f0/1
f1/1 = r2 f0/1
f1/2 = r3 f0/1
f1/3 = r4 f0/1
f1/4 = r5 f0/1
f1/5 = r6 f0/1
f1/6 = bb1 f0/1
f1/7 = bb23 f0/1
[[ROUTER sw3]]
console = 10009
[[ROUTER sw4]]
console = 10010
[[ROUTER bb1]]
console = 10011
slot1 = NM-4T
s1/0 = fw 7
[[ROUTER bb23]]
console = 10012
slot1 = NM-4T
s1/0 = fw 8
[[FRSW fw]]
1:102 = 2:201
1:103 = 3:301
1:104 = 4:401
1:105 = 5:501
1:115 = 5:511
1:106 = 6:601
1:107 = 7:701
1:108 = 8:801
2:203 = 3:302
2:204 = 4:402
2:205 = 5:502
2:206 = 6:602
2:207 = 7:702
2:208 = 8:802
3:304 = 4:403
3:305 = 5:503
3:306 = 6:603
3:307 = 7:703
3:308 = 8:803
4:405 = 5:504
4:406 = 6:604
4:407 = 7:704
4:408 = 8:804
5:506 = 6:605
5:507 = 7:705
5:508 = 8:805
6:607 = 7:706
6:608 = 8:806
7:708 = 8:807
=================================================================
ATM 테스트용
[localhost]
[[7200]]
#idlepc = 0x608184a0
#image = C:\test\c7200-jk9o3s-mz.124-8a.bin
#
idlepc = 0x60752850
image = C:\test\C7200-js.122-25.S10.BIN
workingdir = C:\test\S-7-routers
npe = npe-400
ram = 96
slot1 = PA-4T
[[ROUTER r1]]
console = 10001
s1/0 = fs 1
f0/0 = NIO_gen_eth:\Device\NPF_{1776D518-F50E-4ECA-A39E-9294CECB45CB}
a2/0 = as 1
[[ROUTER r2]]
console = 10002
s1/0 = fs 2
a2/0 = as 2
[[ROUTER r3]]
console = 10003
s1/0 = fs 3
a2/0 = as 3
[[ROUTER r4]]
console = 10004
s1/0 = fs 4
a2/0 = as 4
[[ROUTER r5]]
console = 10005
s1/0 = fs 5
a2/0 = as 5
[[ROUTER r6]]
console = 10006
s1/0 = fs 6
a2/0 = as 6
[[ROUTER r7]]
console = 10007
s1/0 = fs 7
a2/0 = as 7
[[FRSW fs]]
slot1 = PA-8T
1:102 = 2:201
1:103 = 3:301
1:104 = 4:401
1:105 = 5:501
1:106 = 6:601
1:107 = 7:701
2:203 = 3:302
2:204 = 4:402
2:205 = 5:502
2:206 = 6:602
2:207 = 7:702
3:304 = 4:403
3:305 = 5:503
3:306 = 6:603
3:307 = 7:703
4:405 = 5:504
4:406 = 6:604
4:407 = 7:704
5:506 = 6:605
5:507 = 7:705
6:607 = 7:706
[[ATMSW as]]
1:1:102 = 2:2:201
1:1:103 = 3:3:301
1:1:104 = 4:4:401
1:1:105 = 5:5:501
1:1:106 = 6:6:601
1:1:107 = 7:7:701
2:2:203 = 3:3:302
2:2:204 = 4:4:402
2:2:205 = 5:5:502
2:2:206 = 6:6:602
2:2:207 = 7:7:702
3:3:304 = 4:4:403
3:3:305 = 5:5:503
3:3:306 = 6:6:603
3:3:307 = 7:7:703
4:4:405 = 5:5:504
4:4:406 = 6:6:604
4:4:407 = 7:7:704
5:5:506 = 6:6:605
6:6:607 = 7:7:706
5:5:507 = 7:7:705