Thursday, August 9, 2007

[Linux] perl script สำหรับไป show config ของ cisco

perl script สำหรับเก็บ config cisco โดยดึงข้อมูลจาก Database ของ cacti แล้ว telnet ไป show running-config แล้วมาเก็บไว้ จากนั้นก็ทำการ compare กับของเดิมที่มีอยู่โดยใช้ unix diff command ถ้า config มีการเปลี่ยนแปลงให้ส่งเมล์

#!/usr/bin/perl
use Net::Telnet::Cisco;
use DBI();
use File::Copy;
use MIME::Lite;
#$|++;

$diff_cmd ="/usr/bin/diff -b -B -i -w ";
$mail_server = "mail.server.co.th";
$mail_from = 'tacacs@server.co.th';
$mail_to = 'admin@server.co.th';

$username = 'cisco_priv15';
$password = 'cisco_password';

$db_name = 'cacti';
$db_username = 'cacti';
$db_password = 'cacti';

$mail_diff_enable = 1;
$mail_diff_alert = 0;


($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$time=sprintf "%4d-%02d-%02d_%02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec;

$backup_path = sprintf "./config-backup/%4d%02d%02d", $year+1900,$mon+1,$mday;
$backup_lastest = "./config-backup/lastest";
$mail_data ="";
$config_change_count = 0;
mkdir($backup_path);

# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=$db_name;host=localhost",$db_username,$db_password,{'RaiseError' => 1});
my $sth = $dbh->prepare("SELECT id,description,hostname FROM host WHERE hostname != '127.0.0.1' and disabled != 'on' ");
$sth->execute();
while (my $ref = $sth->fetchrow_hashref()) {
#print "Found a row: id = $ref->{'id'}, description = $ref->{'description'}, hostname = $ref->{'hostname'}\n";

$session = ""; # restore to default value
my $session = Net::Telnet::Cisco->new(Host => $ref->{'hostname'}, Errmode => "return");
if($session){
$session->login($username, $password);

$session->cmd('term len 0');
@output = $session->cmd('show running-config');
$num = @output;

if($num > 2 ){
$backup_file = $backup_path."/".$ref->{'description'}."_".$ref->{'hostname'}.".cfg";
$backup_lastest_file = $backup_lastest."/".$ref->{'description'}."_".$ref->{'hostname'}.".cfg";
#print "backup file: $backup_file\n";
#print "backup lastest file: $backup_lastest_file\n";
open(FP,">$backup_file");
for( $i = 3 ; $i < $num ; $i++){ # suppress header file
$cfg = $output[$i];
print FP $cfg;
}
if( -e "$backup_lastest_file"){
$diff = `$diff_cmd $backup_lastest_file $backup_file`;
if($diff){
$mail_data = $mail_data."#==============================================\n";
$mail_data = $mail_data."# Hostname: ".$ref->{'description'}." (".$ref->{'hostname'}.")\n";
$mail_data = $mail_data."#==============================================\n";
$mail_data = $mail_data."$diff\n";
$mail_diff_alert = 1;
$config_change_count++;
#print $mail_data;
}
}
copy($backup_file, $backup_lastest_file);
close(FP);
}


$session->close;
}else{
print "Can't remote telnet to $ref->{'hostname'}\n";
}
}
if($mail_diff_alert && $mail_diff_enable){
$msg = MIME::Lite->new(
From =>"$mail_from",
To =>"$mail_to",
Subject =>"Config has modified $config_change_count host(s) : $time",
Data =>"$mail_data");
$msg->send('smtp', "$mail_server", Timeout=>60);
}

$sth->finish();

$dbh->disconnect();

Monday, August 6, 2007

[MySQL] Mysql replicate DB

mysql สามารถ replicate DB ได้ A<=====>B
Server A:
vi /etc/my.cnf
[mysqld]
log-bin
server-id=1
master-host=192.168.1.1
master-user=replicate
master-password=replicatepass1
replicate-do-db=DB
slave-skip-errors=1050 <<< skip error table exist

Server B:
vi /etc/my.cnf
[mysqld]
log-bin
server-id=2
master-host=192.168.1.2
master-user=replicate
master-password=replicatepass1
replicate-do-db=DB
slave-skip-errors=1050
ทั้ง 2 server ต้องมี tables เหมือนกันโดยจะต้อง create database ก่อน และจะต้อง grant สิทธ์ของ user สามารถ update ข้อมูลกันได้ mysql>create database DB;

mysql>user DB;
mysql>create table 'test' (
`id` int(10) NOT NULL auto_increment,
'name' varchar(32) default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

mysql>load data from master;

command ต่างๆ
mysql>show slave status\G;
mysql>show master status\G;
mysql>start slave;
mysql>stop slave;
mysql>reset slave;

Friday, July 27, 2007

Friday, July 13, 2007

[Cisco] ไม่สามารถ run event manager ได้กับ router ทีใช้ tacacs

สืบเนื่องมาจากได้มีการทดลองใช้ EEM (Embeded Event Manager) กับ Router ที่เป็น production เลยลอง debug ดูพบว่า EEM process มี call cli_lib แล้วเป็น priviledge 0 เลยคิดมาได้ว่า router ตัวนี้ใช้ tacacs เป็นตัว authorization น่าจะสัมพันธ์กันเลยต้องมีการสร้าง user ใน tacacs แล้วให้ process EEM ไปใช้สิทธ์ของ user นั้น

event manager session cli username event-manager
^--แก้ไขสิทธ์ของ EEM process ไปใช้สิทธ์ของ username: event-manager บน tacacs server
event manager applet CustomerReroute
event none
action 1.0 cli command "enable"
^--- เพิ่ม enable ไปด้วยจะได้ priviledge 15
action 1.1 cli command "conf t"
action 1.2 cli command "route-map TEST-MAP permit 5"
action 1.3 cli command "set as-path prepend 100 100 100 100"
action 1.4 cli command "end"
action 1.5 cli command "clear ip bgp 1.1.1.1 soft out"
action 1.6 cli command "write"

Tuesday, June 26, 2007

[Cisco] เราสามารถ limit การ read ของ snmp ได้

เราสามารถ limit การ view ของ snmp ได้โดย

snmp-server view VIEW-NAME OID [included|excluded]

ตัวอย่างเราให้สามารถ read ได้เฉพาะ OID : iso.org.dod.internet.mgmt.mib-2.interfaces เท่านั้น

snmp-server view VIEW_NAME 1.3.6.1.2.1.2 included
snmp-server community TEST view VIEW_NAME ro

Linux:
$snmpwalk -c TEST -v 2c 192.168.1.1
ก็จะเห็นเฉพาะข้อมูลที่เราให้ดูได้

Sunday, June 24, 2007

[Cisco] คิดเล่นๆกับ ACL ต่อ

งั้นถามต่อไปเกี่ยวกับ ACL ที่คล้ายๆกัน

10.0.0.0/16
10.4.0.0/16
10.32.0.0/16
10.36.0.0/16

ต้องการเขียน ACL ที่ match 4 network นี้น่ะครับ เงื่อนไขเหมือนกันคือจะต้องเขียน ACL ให้มีจำนวนบรรทัดน้อยที่สุด
หลังจากจบเรื่อง ACL นี้แล้วทำให้เรารู้เรื่องการคำนวน wildcard mask ครับ

[Cisco] คิดเล่นๆกับ BGP

โจทย์
บริษัท A ใช้ AS100 peering กับบริษัท B AS200 วันหนึ่ง A มีการเปลี่ยน AS จาก 100 เป็น 300 แต่ไม่ต้องการให้ B แก้ไข config ใดๆทั้งสิ้น
จะต้อง config BGP ที่ router ของ A เท่านั้นในการเปลี่ยน AS100 -> AS300 และไม่แก้ไข config ของ B

Saturday, June 23, 2007

[Cisco] ลองคิดเล่นๆ #2

ลองคิดต่อน่ะครับ

โจทย์มี routing
155.1.0.0/24
155.1.1.0/24
155.1.2.0/24
155.1.3.0/24
155.1.4.0/24
155.1.5.0/24
....
155.1.255.0/24

ต้องการเขียน filter เพื่อรับ routing เฉพาะ octet ที่3 เป็นเลขคู่เท่านั้น โดย access-list ที่เขียนใช้จำนวนบรรทัดน้อยที่สุดที่เป็นไปได้
ผลที่ผ่าน acl แล้ว
155.1.0.0/24
155.1.2.0/24
155.1.4.0/24
155.1.6.0/24
155.1.8.0/24
....
155.1.254.0/24

Friday, June 22, 2007

[Cisco] ลองคิดเล่นๆ

ต้องการเพิ่ม user เข้าใน router โดยมีข้อมูลดังนี้
username cisco password cisco?
จะต้องทำอย่างไร

Wednesday, June 20, 2007

[Cisco] Event Manager ไว้ต้องการจับ event แล้วให้ทำคำสั่ง

Event Manager:
เวลาเราต้องการให้ router พบ event บางอย่างแล้วให้ action ตาม command ที่กำหนด ตัวอย่างคือ เมื่อ event manager พบ syslog ที่มี pattern neighbor x.x.x.x Up/Down แล้วให้ทำคำสั่ง

#conf t
event manager applet bgp-down
event syslog pattern "neighbor 192.168.10.2 Down" <-- ตรวจจับ event ของ syslog ที่มี pattern "neighbor 192.168.10.2 Down"
action 1.0 cli command "conf t" <--- ให้เริ่มทำคำสั่ง
action 1.1 cli command "int f0/0"
action 1.2 cli command "no ip policy route-map redirect"
action 1.3 cli command "no ip wccp 80 redirect in"
action 1.4 syslog msg "Alert !!!! policy change by BGP-Down" <--- ให้ส่ง message ไป syslog
action 1.5 mail server "20.20.20.1" to "kitti@mail.xx" from "event-mager@router" subject "Alert neighbor BGP down" body "Neighbor 192.168.10.2 Down" <--- ให้ส่ง mail ด้วย

event manager applet bgp-up
event syslog pattern "neighbor 192.168.10.2 Up"
action 1.0 cli command "conf t"
action 1.1 cli command "int f0/0"
action 1.2 cli command "ip policy route-map redirect"
action 1.3 cli command "ip wccp 80 redirect in
action 1.4 syslog msg "Alert !!! Policy change by BGP-Up"
action 1.5 mail server "20.20.20.1" to "kitti@mail.xx" from "event-mager@router" subject "Alert neighbor BGP up" body "Neighbor 192.168.10.2 Up"

Tuesday, June 12, 2007

[Cisco] Config Q-in-Q (dot1q-tunneling)

Network diagram
Physical connections:
[R1 f0/1]<--->[ g1/0/1 SW1 g1/0/23 -24 ]<--trunk-->[ g1/0/21 -22 SW2 g1/0/23 -24 ] <--trunk-->[ g1/0/23-24 SW3 g1/0/1 ] <--> [ f0/1 R2]

[R1]:
interface f0/1
ip add 192.168.10.1 255.255.255.0
no sh
interface f0/1.100
encap dot1q 100
ip add 192.168.100.1 255.255.255.0

>> R1 verify
sh ip rou
C 192.168.10.0/24 is directly connected, FastEthernet0/1
C 192.168.100.0/24 is directly connected, FastEthernet0/1.100


[R2]:
interface f0/1
ip add 192.168.10.2 255.255.255.0
no sh
interface f0/1.100
encap dot1q 100
ip add 192.168.100.1 255.255.255.0
>> R2 verify
sh ip rou
C 192.168.10.0/24 is directly connected, FastEthernet0/1
C 192.168.100.0/24 is directly connected, FastEthernet0/1.100


[SW1]
system mtu 1504 <------ reload
vlan 100
interface g1/0/1
switchport mo dot1q-tunnel
l2protocol-tunnel point-to-point pagp <--- l2protocol-tunnel this command enable for allow protocols pass throught dot1q-tunnelling
l2protocol-tunnel point-to-point lacp
l2protocol-tunnel point-to-point udld
l2protocol-tunnel cdp
l2protocol-tunnel vtp
l2protocol-tunnel stp
swi access vl 100
no sh
interface rang f0/23 -24
swi tru en dot1q
swi mo tru
no sh
>> SW1 verify
sh int g1/0/1 switchport
sh l2protocol-tunnel
sh int trunk


[SW2]
system mtu 1504 <------ reload
vlan 100
interface rang f0/21 -24
swi tru en dot1q
swi mo tru
no sh

[SW3]
system mtu 1504 <------ reload
vlan 100
interface g1/0/1
switchport mo dot1q-tunnel
l2protocol-tunnel point-to-point pagp
l2protocol-tunnel point-to-point lacp
l2protocol-tunnel point-to-point udld
l2protocol-tunnel cdp
l2protocol-tunnel vtp
l2protocol-tunnel stp
swi access vl 100
no sh
interface rang f0/21 -24
swi tru en dot1q
swi mo tru
no sh


R1:
sh cdp nei <-- can see R2 direct connect
ping 192.168.100.2 <-- can reachable

Wednesday, June 6, 2007

[Cisco] TCL script สำหรับ ping ระบุ source จาก ip ทุกๆ interface

โดยดัดแปลงจาก internetworkexpert
router#tclsh
router(tcl)#
set l [llength [ exec "sh ip int brie | e down|unassig|Status" ]]
set x [ exec "sh ip int brie | e down|unassig|Status" ]
foreach dst {
150.1.1.1
150.1.2.2
} {
set c 0
puts "##########################################"
while {$c<=$l} {
set src [lindex $x $c]
if { [regexp "(^\[0-9]+\.\[0-9]+\.\[0-9]+\.\[0-9]+)" $src] } {
puts "========================================"
puts "ping ip $dst source $src repeat 3"
puts ["ping ip $dst source $src repeat 3"]
}
incr c
}
}

Tuesday, June 5, 2007

[Cisco] ต้องการทำ SPAN port เพื่อ sniff packet

ต้องการทำ SPAN port เพื่อ sniff packet พอไป search เห็นจาก web
How to limit traffic spanned
มีวิธีการ config อยู่หลายวิธีนอกจาก command monitor

Example to monitor HTTP traffic.

c6509(config)# access-list 100 permit tcp any any eq 80
c6509(config)# access-list 101 permit ip any any
c6509(config)# vlan access-map MyCap 10
c6509(config-access-map)# match ip address 101
c6509(config-access-map)# action forward
c6509(config)# vlan access-map MyCap 20
c6509(config-access-map)# match ip address 100
c6509(config-access-map)# action forward capture
c6509(config)# vlan filter MyCap vlan-list 200 , 201
c6509(config)# interface gi3/1
c6509(config-if)# switchport capture

===================

Configuration to capture HTTP traffic on VLAN 20 and send to fa0/24.

c3550(config-access-map)#action forward
c3550(config-access-map)#match ip address SA-TRAFFIC
c3550(config-access-map)#vlan filter RSPAN-VACL vlan-list 100
c3550(config)#interface vlan100
c3550(config-if)#description RSPAN Destination VLAN
c3550(config-if)#no ip address
c3550(config-if)#ip access-list extended SA-TRAFFIC
c3550(config-ext-nacl)#permit tcp any any eq 80
c3550(config)#monitor session 1 source vlan 20 rx
c3550(config)#monitor session 1 destination remote vlan 100 reflector-port fa0/24
c3550(config)#vlan access-map RSPAN-VACL 10


====================

Configuration of Http traffic on VLANs 200 and 201 sent to 3/1.

c6509(config)#ip access-list extended SA-Capture
c6509(config-ext-nacl)# permit tcp any any eq 80
c6509(config-ext-nacl)#exit
c6509(config)#int vlan 200
c6509(config-if)#mls ip ids SA-Capture
c6509(config)#int vlan 201
c6509(config-if)#mls ip ids SA-Capture
c6509(config-if)#int gig3/1
c6509(config-if)#switchport capture

Tuesday, May 29, 2007

[Linux] setup jffnms แล้วจะ create postgresql database แล้ว error

แก้ไข
vi /var/lib/pgsql/data/pg_hba.conf
เพิ่ม
local all all trust
host all all 127.0.0.1 255.255.255.255 trust
แล้ว restart

Thursday, May 24, 2007

[Linux] Squid จะต้องการให้มีการ redirect url โดยดูจาก source ip

จะใช้ squid ทำตัวเป็น redirector โดยให้ดูจาก rule ที่กำหนด
#vi /etc/squid/squid.conf
url_rewrite_program /home/kitti/squid_redirect.pl
#vi /home/kitti/squid_redirect.pl

#!/usr/bin/perl
$|=1;

sub print_log
{
local($msg) = @_;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$time=sprintf "%4d-%02d-%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec;
open(LOG,"+>>$log_file");
print LOG "$time : $msg";
close(LOG);
}

$rules_file = "/etc/squid/rules.conf";
$log_file = "/var/log/squid/redirect.log";
open (RULE,$rules_file);
&print_log("-- redirector start --\n");
while (<>) {
@X = split;
seek(RULE,0,0);
$url = $X[0];
($ip,$fqdn) = split(/\//,$X[1]);
$number=1;
$flag=0;
$line_no=0;
$go_url = $url;
while(){
chomp;
$line = $_;
if((!($line =~ /^[\#\;\t ]/))&&($line)){
($src_ip,$dst_url,$action,$redirect) = split(/[ |\t]+/,$line);
if(($url =~ /$redirect/)&&($ip =~ /$src_ip/)) {
$flag = 1;
$go_url = $url;
$action = "direct-to";
}elsif (($url =~ /$dst_url/)&&($ip =~ /$src_ip/)) {
$line_no = $number;
if($action eq 'bypass'){
$go_url = $url;
$flag = 1;
}elsif ($action eq 'redirect-to'){
$go_url = "302:$redirect";
$flag = 1;
}
}
}
$number++;
if($flag){ last; }
}
print "$go_url\n";
#&print_log("squid request: @X\n");
&print_log("ip:$ip, url:$url, rule:$line_no, action:$action, redirect:$go_url\n");

}
close(RULE);
&print_log("-- redirector exit-- \n");
exit(0);
#===============================================================

#vi /etc/squid/rules.conf
# description
;src-ip url action
1.1.1.1 www.domain1.com bypass
127.0.0.1 www.domain2.co.th bypass
.* www.domain3.com bypass
.* domain4.co.th bypass
.* .* redirect-to http://www.default-domain.co.th

Wednesday, May 16, 2007

[Linux] ใช้ firefox บน ubuntu แล้วเปิด Link ที่เป็น telnet:// ไม่ได้

อันเนื่องมาจากเปิด www.traceroute.org แล้วจะให้ firefox เรียก telnet ขึ้นมาให้เลย
1. ที่ address bar พิมพ์ about:config
2. click ขวา แล้วเลือก new->boolean
network.protocol-handler.external.telnet = true แล้ว Ok
3. click ขวาเพิ่มอีก new->string
network.protocol-handler.app.telnet = /usr/bin/firefox-telnet.sh
4. sudo vi /usr/bin/firefox-telnet.sh

#!/bin/bash
gnome-terminal -e "telnet ${1##telnet://}"

Wednesday, May 2, 2007

[CCIE] วันนี้มาคุยเรื่อง Cisco 7200 Simulator กัน

ขอขอบคุณ
http://www.ipflow.utc.fr/blog/
http://dynagen.org/
http://hacki.at/7200emu/

สำหรับคนที่ต้องการทำ lab ของinternetworkexpert iewb v4. โดยอุปกรณ์ของผมมีดังนี้
- Notebook DELL D620 Core2Duo 1.83 Ram 2G x 1 (OS Linux Ubuntu 7.04 ผมรู้สึกว่ามันเร็วกว่า XP)
- Catalyst 3750 x 4
- Catalyst 2950 x 1
- USB hub 4 port
- USB ethernet x 3 (เวลาไปซื้อเอาที่เป็น chipset realtek rtl8150 )น่ะครับแพงหน่อยประมาณ 500บาท ที่พันธ์ทิพย์ มันจะมียี้ห้อราคาถูกแนะนำว่าอย่าไปซื้อน่ะครับมันเห็นพร้อมกันไม่ได้มาก ที่จริงแล้วควรซื้อมาเท่ากับจำนวนของ router ที่ต่อออกไป switch 4 ตัวผมนับดูแล้วประมาณ 12 ตัวครับ แต่พอดีผมมี 2950 อยู่ก็เลยจะทำ trunk จาก DELL ไปหา 2950 แล้วต่อจาก 2950 ไปหา core switch ทั้ง 4 ตัวเพื่อประหยัด USB ethernet (แต่จะมี R6 ต่อไปหา core switchไม่ผ่าน 2950 ต้องใช้ usb ethernet ต่อกันตรงๆ เพราะว่าจะต้อง enable 802.1q ที่ R6 ด้วย)

จากตัว simulator มันค่อนข้างจะบริโภค CPU กับ RAM ครับ idea ของผมก็คือทุกอย่างที่ run อยู่จะต้องอยู่บน ram เพราะว่าเวลา access จะได้เร็วๆ และก็ใช้ idlepc, ghostios
ถ้าใครมี idea ดีก็บอกด้วยน่ะครับ
- สร้าง ramdisk 384M เพื่อที่จะได้ access ที่ ram จะได้เร็วๆกว่า harddisk (make_ramdisk.sh)
vi /boot/grub/menu.lst
kernel /boot/vmlinuz-2.6.20-15-lowlatency root=UUID=cd4fa939-5e2a-4450-82fb-45a11a435658 ro quiet splash verbose ramdisk_size=384000

แล้วก็ reboot

vi make_ramdisk.sh
#!/bin/sh

dd if=/dev/zero of=/dev/ram0 bs=1k count=384000
mke2fs -vm0 /dev/ram0 384000
mkdir -p /mnt/ramdisk
mount /dev/ram0 /mnt/ramdisk
mkdir -p /mnt/ramdisk/working
เวลา run script
$sudo ./make_ramdisk.sh

- สร้าง interface trunking ระหว่าง linux กับ 2950 (make_if_trunk.sh)
eth2 ทำเป็น mode promiscuous ด้วยไม่งั้นเดี๋ยวมีปัญหาเรื่องรับ packet multicast จุดนี้ผมงงอยู่หลายวัน พอ on ospf R1 กับ SW1 มันไม่ได้ทั้งๆที่เห็น multicast packet ออกจาก SW1 แล้ว ใช้ tcpdump มาจับ packet ดูก็ไม่เห็น ปรากฏว่า tcpdump มันไม่ทำตัวเป็น promisc ตั้งแต่ linux kernel 2.2+ จึงไม่เห็น multicast ที่เข้ามา แต่พอใช้ program ethereal มา sniff packet แล้วสามารถใช้ได้ในช่วงที่ sniff packet เหตุเพราะตัว linux เองมันก็จะ discard packet ที่ destination ไม่ใช่ตัวมันเอง เลยจึงจำเป็นต้องทำเป็น Mode สำส่อนเลย
#!/bin/sh
echo "Loading 802.1q module"
modprobe 8021q
ifconfig eth2 down
ifconfig eth3 down
ifconfig eth4 down
ifconfig eth2 promisc up
ifconfig eth3 promisc up
ifconfig eth4 promisc up
echo "Configuring VLAN_id to interface eth2"
vconfig add eth2 2
vconfig add eth2 3
vconfig add eth2 4
vconfig add eth2 5
vconfig add eth2 6
vconfig add eth2 7
vconfig add eth2 8
vconfig add eth2 9
vconfig add eth2 10
vconfig add eth2 11
echo "Creating interface for each vlans"
ifconfig eth2.2 promisc up
ifconfig eth2.3 promisc up
ifconfig eth2.4 promisc up
ifconfig eth2.5 promisc up
ifconfig eth2.6 promisc up
ifconfig eth2.7 promisc up
ifconfig eth2.8 promisc up
ifconfig eth2.9 promisc up
ifconfig eth2.10 promisc up
ifconfig eth2.11 promisc up

เวลา run script
$sudo ./make_if_trunk.sh

- ทำการ run process dynamips (start-dynamips.sh)
#!/bin/sh
cd /var/log/
sudo nice dynamips -H 3601 &
sudo nice dynamips -H 3602 &
sudo nice dynamips -H 3603 &
sudo nice dynamips -H 3604 &
sudo nice dynamips -H 3605 &
sudo nice dynamips -H 3606 &
sudo nice dynamips -H 3607 &
sudo nice dynamips -H 3608 &
sudo nice dynamips -H 3609 &
sudo nice dynamips -H 3610 &

เวลา run script
$sudo ./start-dynamips.sh

- script สำหรับ run dynagen (start-ccie-x.sh)
#!/bin/sh
cp -f /home/kitti/DATA/Dynamips/iewb4/working/c3600_R[1-6]_nvram /mnt/ramdisk/working/
sudo -u kitti /usr/local/dynagen/dynagen /home/kitti/DATA/Dynamips/iewb4/config/ccie-x.net
echo "Sync data..please wait...."
cp -f /mnt/ramdisk/working/* /home/kitti/DATA/Dynamips/iewb4/working/

เวลา run script
$sudo ./start-ccie-x.sh

- config file ของ dynagen (ccie-x.net)

#------------------------------------------
#Begin Dynagen config file
autostart = False
ghostios = true
sparsemem = true
mmap = false

###############################################################################
#
# Internetwork Expert Routing & Switching topology Version 4.0 mappings for dynamips/dynagen
# by: Brian McGahan, CCIE #8593
# bmcgahan@internetworkexpert.com
#
# For more information:
# Dynamips: http://www.ipflow.utc.fr/index.php/Cisco_7200_Simulator
# Dynagen: http://dyna-gen.sourceforge.net/
# Hacki's Forum: http://hacki.at/7200emu/index.php
# Internetwork Expert's Forum: http://forum.internetworkexpert.com
#
###############################################################################

##################################################
#
# Define global router parameters for instance 1
#
##################################################


[localhost:3601]
udp = 11000

workingdir = /mnt/ramdisk/working

[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router R1]]
model = 3640
console = 2001
slot0 = NM-1FE-TX
slot1 = NM-4T
F0/0 = NIO_gen_eth:eth2.11
S1/0 = FRSW 1
idlepc = 0x6046e3ec


##################################################
#
# Define global router parameters for instance 2
#
##################################################


[localhost:3602]
udp = 12000

workingdir = /mnt/ramdisk/working
[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router R2]]
model = 3640
console = 2002
slot0 = NM-1FE-TX
slot1 = NM-4T
F0/0 = NIO_gen_eth:eth2.2
S1/0 = FRSW 2
idlepc = 0x6046e3ec


##################################################
#
# Define global router parameters for instance 3
#
##################################################


[localhost:3603]
udp = 13000

workingdir = /mnt/ramdisk/working
[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router R3]]
model = 3640
console = 2003
slot0 = NM-4E
slot1 = NM-4T
S1/0 = FRSW 3
S1/1 = FRSW 13
S1/2 = R1 S1/1
S1/3 = R2 S1/1
E0/0 = NIO_gen_eth:eth2.3
E0/1 = NIO_gen_eth:eth2.4
idlepc = 0x6046e3ec


##################################################
#
# Define global router parameters for instance 4
#
##################################################


[localhost:3604]
udp = 14000

workingdir = /mnt/ramdisk/working
[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router R4]]
model = 3640
console = 2004
slot0 = NM-4E
slot1 = NM-4T
E0/0 = NIO_gen_eth:eth2.5
E0/1 = NIO_gen_eth:eth2.6
S1/0 = FRSW 4
S1/1 = R5 S1/1
idlepc = 0x6046e3ec


##################################################
#
# Define global router parameters for instance 5
#
##################################################


[localhost:3605]
udp = 15000

workingdir = /mnt/ramdisk/working
[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router R5]]
model = 3640
console = 2005
slot0 = NM-4E
slot1 = NM-4T
E0/0 = NIO_gen_eth:eth2.7
E0/1 = NIO_gen_eth:eth2.8
S1/0 = FRSW 5
idlepc = 0x6046e3ec


##################################################
#
# Define global router parameters for instance 6
#
##################################################


[localhost:3606]
udp = 16000

workingdir = /mnt/ramdisk/working
[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router R6]]
model = 3640
console = 2006
slot0 = NM-4E
slot1 = NM-4T
E0/0 = NIO_gen_eth:eth3
E0/1 = NIO_gen_eth:eth4
S1/0 = FRSW 6
idlepc = 0x6046e3ec


##################################################
#
# Define global router parameters for instance 11
#
##################################################


[localhost:3607]
udp = 17000

workingdir = /mnt/ramdisk/working
[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router BB1]]
model = 3640
console = 2007
slot1 = NM-4T
S1/0 = BB3 S1/0
S1/1 = FRSW 21
cnfg = /home/kitti/DATA/Dynamips/iewb4/working/BB1.initial.config.txt
idlepc = 0x6046e3ec



##################################################
#
# Define global router parameters for instance 12
#
##################################################


[localhost:3608]
udp = 18000

workingdir = /mnt/ramdisk/working
[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router BB2]]
model = 3640
console = 2008
slot0 = NM-4E
E0/0 = NIO_gen_eth:eth2.9
cnfg = /home/kitti/DATA/Dynamips/iewb4/working/BB2.initial.config.txt
idlepc = 0x6046e3ec



##################################################
#
# Define global router parameters for instance 13
#
##################################################


[localhost:3609]
udp = 19000

workingdir = /mnt/ramdisk/working
[[3640]]
#
# Specify 3640 IOS image on Windows here:
image = /home/kitti/DATA/Dynamips/iewb4/images/c3640-jk9o3s-m.123-21.bin

ram = 73
disk0 = 0
disk1 = 0

[[Router BB3]]
model = 3640
console = 2009
slot0 = NM-4E
slot1 = NM-4T
E0/0 = NIO_gen_eth:eth2.10
E0/3 = NIO_gen_eth:eth0
cnfg = /home/kitti/DATA/Dynamips/iewb4/working/BB3.initial.config.txt
idlepc = 0x6046e3ec


##################################################
#
# Define Frame-relay parameter
#
##################################################

[[FRSW FRSW]]

# R1 to FRSW
1:102 = 2:201
1:103 = 3:301
1:113 = 13:311
1:104 = 4:401
1:105 = 5:501

# R2 to FRSW
2:203 = 3:302
2:213 = 13:312
2:204 = 4:402
2:205 = 5:502

# R3 to FRSW
3:304 = 4:403
3:305 = 5:503
13:314 = 4:413
13:315 = 5:513

# R4 to FRSW
4:405 = 5:504

# R6 to FRSW
6:51 = 21:51
6:100 = 21:100
6:101 = 21:101
6:201 = 21:201
6:301 = 21:301
6:401 = 21:401

#End Dynagen config file
#------------------------------------------

- สุดท้ายก็ IOS ของ router ที่จะใช้ครับ

Wednesday, April 25, 2007

[Linux] config vlan trunking ต่อเข้ากับ Cisco catalyst2950

มาเริ่มทำเลยดีกว่า (อ้างอิง Ubuntu linux 7.04)
$sudo apt-get install vlan
ทำการ load module 802.1q
$sudo modprobe 8021q
ทำการ add tag 2 กับ physical interface eth2
$sudo vconfig add eth2 2
ทำการ create logical insterface eth2.2
$sudo ifconfig eth2.2 192.168.2.2 netmask 255.255.255.0 up

-- Switch Cisco catalyst2950
interface f0/1
des ## connect to linux box eth2 ##
no shut
switchport mode trunk

interface f0/2
switchport mode access
switchport access vlan 2
no shut

Monday, April 23, 2007

[Linux] ต้องการ install ผ่าน network โดย boot ผ่าน PXE

เรื่องมีอยู่ว่าผมจะ install CentOS แต่ Download มาเป็น DVD แต่ว่าตัว server ดันไม่มี dvd drive เลยต้องลำบากหาวิธีที่จะ install เห็นมี install ผ่าน network โดยให้ server มัน boot ผ่าน PXE แล้ว install ผ่าน http (ไม่รู้ว่างานนี้ทำเวอร์เกินไปหรือเปล่า?)
ต้องมี
Notebook ผมเก็บตัว installer ต้อง enable service ดังนี้
interface eth0
$sudo ifconfig eth0 10.10.10.1 netmask 255.255.255.0 up

Web server (lighttpd)
$sudo apt-get install lighttpd
$sudo /etc/init.d/lighttpd start

download image ของ CentOS ชื่อ /tmp/CentOS-5.0-i386-bin-DVD.iso
$sudo mkdir -p /var/www/installer
$sudo mount -t iso9660 -o loop /tmp/CentOS-5.0-i386-bin-DVD.iso /var/www/installer

DHCP Service
$sudo apt-get install dhcpd3-server
$sudo vi /etc/dhcp3/dhcpd.conf
ddns-update-style none;
subnet 10.10.10.0 netmask 255.255.255.0 {
range 10.10.10.100 10.10.10.200;
option routers 10.10.10.1;
filename="pxeboot/pxelinux.0";
}
$sudo /etc/init.d/dhcp3-server start

PXE Service
$sudo apt-get install pxe
$sudo /etc/init.d/pxe start

SYSLINUX
$sudo apt-get install syslinux

TFTP Service
$sudo apt-get install atftpd
$sudo mkdir -p /tftpboot/pxeboot
$sudo mkdir -p /tftpboot/pxeboot/CentOS_5.0_i386
$sudo cp /var/www/installer/images/pxeboot/vmlinuz /tftpboot/pxeboot/CentOS_5.0_i386
$sudo cp /var/www/installer/images/pxeboot/initrd.img /tftpboot/pxeboot/CentOS_5.0_i386
$sudo cp /usr/lib/syslinux/pxelinux.0 /tftpboot/pxeboot/ <-- file นี้เอามาจาก syslinux พอดีเครื่องผมใช้ ubuntu
$sudo mkdir -p /tftpboot/pxeboot/pxelinux.cfg

# config file สำหรับเลือก boot แยกแต่ล่ะ mac address หรือค่า default
$sudo vi /tftpboot/pxeboot/pxelinux.cfg/00-E0-4C-03-1D-08 <--- mac address ของ server
หรือ
$sudo vi /tftpboot/pxeboot/pxelinux.cfg/default

default CentOS_5.0_i386
timeout 10
prompt 1
display display.msg
label CentOS_5.0_i386
kernel CentOS_50_i386/vmlinuz
append initrd=CentOS_50_i386/initrd.img
หรือถ้ามี script kickstart
# append initrd=CentOS_50_i386/initrd.img ks=http://10.10.10.1/installer/anaconda.cfg
$sudo vi /tftpboot/pxeboot/display.msg
Linux installer via PXE boot:
CentOS_5.0_i386

$sudo chown -R nobody:nobody /tftpboot
$sudo /etc/init.d/atftpd start

ตอนนี้จัดเตรียมตัว install ไว้แล้ว
จากนั้นก็เอา server มาต่อ สาย lan แล้วให้ boot จาก lan card โดยให้ set ที่ bios
status มันก็จะ request DHCP แล้วก็จะได้ ip กลับไป
Linux installer via PXE boot:
CentOS_5.0_i386
boot:
ให้พิมพ์ดังนี้
boot: CentOS_5.0_i386 แล้ว enter
มันก็จะ boot แล้วเข้าสู่กระบวนการ install แล้วให้เราเลือก source ที่จะใช้ ผมเลือกใช้ http
มันจะถาม ip ของ web server และ directory
ip or name server: 10.10.10.1
directory: /installer/
แล้ว OK

Friday, April 20, 2007

[Cisco] ทำ frame-relay traffic shaping

from: h**p://www.cisco.com/warp/public/125/traffic_shaping_6151.html
interface Serial0/0
no ip address
encapsulation frame-relay
no fair-queue
frame-relay traffic-shaping
!
interface Serial0/0.1 point-to-point
ip address 10.1.1.2 255.255.255.0
frame-relay interface-dlci 16
frame-relay class cisco
!
map-class frame-relay cisco
frame-relay cir 64000
frame-relay mincir 32000
frame-relay adaptive-shaping becn
frame-relay bc 8000

อ้างจากรูป













เพื่อเข้าใจง่ายขึ้นเรื่อง CIR,Bc,Be
CIR = Commit Information Rate
Bc = Burst commit คือใน 1 Tc จะสามารถส่ง data ได้กี่บิต
Be = Burst excess
AR = Access Rate
Tc = Time interval (default 125ms)
Bc = CIR * Tc (หรือ Bc = CIR/8 กรณีที่ Tc ค่า default 125ms)
Be = (AR-CIR) * Tc

Friday, April 13, 2007

[FreeBSD] พอ install OS แล้วผมก็เตรียมพร้อมสำหรับโหลดบิต

ต้องทำให้เครื่อง pentium3 แรงๆเพื่อจะได้โหลดบิต (ทำแบบมั่วๆ search ใน google เรื่อง optimize, tunning บ้างมารวมๆกัน)

Thursday, April 12, 2007

[FreeBSD] ต้องการ compile Kernel ใหม่แต่ตอน Install เราไม่ได้เลือกให้ลง src

#/usr/sbin/sysinstall
- configure -> Distributions -> src -> All -> Ok -> FTP or CD/DVD
เมื่อเสร็จแล้ว
/usr/src/sys/i386/conf

Monday, April 9, 2007

[MySQL] ใช้ command line แก้ไข column size

กันลืม ใช้บ่อยมากเวลาแก้ไข column size

ALTER TABLE foo MODIFY column FOO ...

I would just use TEXT or TINYTEXT but if you wanted
only 1000 chars, you would use VARCHAR(1000);

บทเรียนจากพระพยอมเรื่องซื้อที่ดิน

ผมดูข่าวของพระพยอมแล้วทำให้รู้อะไรบางอย่างว่า เวลาคุณไปซื้อกล้วยทอด แล้วคุณท้องเสีย จะเอาผิดใครไม่ได้ เพราะว่าคุณไม่ได้ถามแม่ค้าว่า น้ำมันค้างมานานหรือยัง กล้วยเสียหรือเปล่า แป้งมันที่มาทอดได้คุณภาพ อย. หรือเปล่า ไม้จิ้มเนี่ยล้างสะอาดแล้วใช่ไหม.......ประเทศไทย

Thursday, April 5, 2007

[Cisco] จะ enable portchannel บน sup กับ module อื่น

ผมจะ enable portchannel บน interface ที่อยู่บน sup กับ interface GiE ที่ module อื่นปรากฏว่าพอผม add port ที่อยู่บน sup เข้าไปเกิด error
Apr 5 08:53:31: %EC-SP-5-CANNOT_BUNDLE2: Gi6/1 is not compatible with Gi1/11 and will be suspended (qos-card types of Gi6/1 do not match Gi1/11)

แก้ปัญหาโดย
conf t
interface port-channel 5
no mls qos channel-consistency
end
wr
ก็จะสามารถ bundle เข้าไปได้ครับ

Monday, April 2, 2007

[Troubleshoot] ตรวจสอบว่า server เปิด port หรือเปล่า?

ผมมีปัญหาอยู่ว่าใช้งาน www ว่าเปิดใช้งานได้หรือเปล่า?
ผมจึง test ไปที่ port 80
#telnet www.google.co.th 80
GET / HTTP/1.0
Host: www.google.co.th

HTTP/1.0 200 OK
Cache-Control: private
Content-Type: text/html; charset=windows-874
Set-Cookie: PREF=ID=5b1649e656f8f15d:TM=1175486984:LM=1175486984:S=N34yIfvZSGMzc36h; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.co.th
Server: GWS/2.1
Date: Mon, 02 Apr 2007 04:09:44 GMT
Connection: Close
<----- DATA ------>

Friday, March 30, 2007

[Linux] เวลาเอาไฟล์จาก dos มาใช้บน linux แล้วเห็น ^M

มักจะมีปัญหาว่าเอาไฟล์จาก dos มาใช้ใน linux แล้วเห็นเป็น ^M อยากจะเอามันออก

#col -bx < dos-filename > new-filename

[Linux] จะใช้ console ผ่าน com1 กับ linux

อยากทำเท่ config linux ผ่าน console เหมือนพวก router
vi /etc/grub.conf
serial --unit=0 --speed=9600
terminal --timeout=15 console serial

บรรทัด kernel ต่อท้ายบรรทัดด้วย console=tty0 console=ttyS0

ถ้า loader ใช้ lilo
vi /etc/lilo.conf
serial = 0,9600n8
append = "console=ttyS0,9600n8"

vi /etc/inittab
S1:12345:respawn:/sbin/agetty -L ttyS0 9600 vt100

vi /etc/securetty
! เอา remark ออกตรง ttyS0 เพื่อให้ root สามารถ login ได้

[Linux] เคยดู log ของ Squid แล้วอยากดู timestamp ที่มันรู้เรื่องหน่อย

vi converttime.pl
#!/usr/bin/perl -p
s/^\d+\.\d+/localtime $&/e;

เวลาใช้งาน
#./converttime.pl access-log

ค่อยรู้เรื่องหน่อย

[Cisco] ใช้ Cisco ต่อ adsl modem แล้ว dial ออกไป

นานมาแล้วเรื่องมันมีอยู่ว่ามี router cisco อยู่ 1 ตัวถ้าไปซื้อ adsl module มันก็จะแพงไป พอดีเราก็มี adsl modem ที่ได้ฟรีมา ดีเลยเราใช้ cisco router ใช้ connect ผ่าน adsl modem ออกไป เยี่ยมเลยถ้าทำ nat ก็ work ไปเลย

PC--- f0/1 { Cisco } f0/0 -------(adsl modem)-------------adsl line

conf t

ip dhcp pool default
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
dns-server 203.144.y.y 203.144.x.x

interface f0/0
no ip address
no ip proxy-arp
pppoe enable group global
pppoe-client dial-pool-number 1

interface f0/1
ip add 192.168.10.1 255.255.255.0
ip tcp adjust-mss 1452
ip nat inside
no shut

no shutdown
interface dialer1
ip address negotiate
ip mtu 1492
encapsulation ppp
no ip proxy-arp
dialer pool 1
dialer-group 1
ppp chap hostname USERNAME
ppp chap password PASSWORD
ppp pap sent-username USERNAME password PASSWORD

ip nat inside source list 1 interface dialer1 overload
access-list 1 permit 192.168.10.0 0.0.0.255
ip route 0.0.0.0 0.0.0.0 dialer1
dialer-list 1 protocol ip permit

!-------------------------------------------------------------

ลองเอาไปใช้ดูครับ

[Cisco] Config Cisco เป็น VPN/IPSec Server

ผมใช้ VPN Client ของ Cisco connect มาที่ Cisco7200 ip x.x.x.x เพื่อใช้ resource ที่อยู่ใน LAN
Group = CISCO_GROUP
Group Password = cisco_group
Username = cisco
Password = cisco

aaa authentication login vpn_authen local
aaa authorization network vpn_group_authen local
!
username cisco password cisco
!
crypto isakmp policy 1
encr 3des
authentication pre-share
group 2
!
crypto isakmp client configuration group CISCO_GROUP
key cisco_group
pool VPN_CLIENT_POOL
acl 102
!
crypto ipsec transform-set vpn_client esp-3des esp-sha-hmac
crypto ipsec df-bit clear
!
crypto dynamic-map dynmap 50
set transform-set vpn_client
reverse-route
!
crypto map vpn client authentication list vpn_authen
crypto map vpn isakmp authorization list vpn_group_authen
crypto map vpn client configuration address respond
crypto map vpn 50 ipsec-isakmp dynamic dynmap
!
interface FastEthernet0/0
description ## LAN ##
ip address 172.31.1.254 255.255.255.0
duplex half

!
interface Serial0/0
description ## Internet ##
ip address x.x.x.x y.y.y.y
crypto map vpn
!
ip local pool VPN_CLIENT_POOL 172.31.3.1 172.31.3.10
!
access-list 102 permit ip 172.31.1.0 0.0.0.255 172.31.3.0 0.0.0.255
!

[Private] ขอขอบคุณลูกพี่

ขอขอบคุณลูกพี่ Google ที่ทำให้ผมทำ Blog และ share ความรู้ทุกอย่างครับ
ขอบคุณพี่ Google อีกครั้งครับ

แสดงความคิดเห็นสำหรับ Blog ของผม

ช่วยแสดงความคิดเห็นหน่อยครับ อาจจะแนะนำว่าผมเขียนผิด หรือไม่ดีตรงไหนผมจะได้ปรับปรุงผลงานต่อไป ขอบคุณทุกคนที่เข้ามาเยี่ยมชมและแสดงความคิดเห็น หรือจะให้ผมช่วยอะไรได้บ้าง ก็บอกกันมา(ถ้าทำได้)......

[Cisco] เคยรำคาญกันบ้างไหมเวลาเราพิมพ์ command ผิดแล้ว???

เคยรำคาญกันบ้างไหมเวลาเราพิมพ์ command ผิดแล้วมันไป resolve dns หรืออื่นๆที่ทำให้เรารอนานกว่ามันจะขึ้น prompt

C3825-FTN-OFFICE#xxx !<--- แกล้ง router โดยใส่ command ผิดไป
Translating "xxx"...domain server (255.255.255.255) !<--- ไป resolve dns ทำให้รอนาน

Translating "xxx"...domain server (255.255.255.255)

Translating "xxx"...domain server (255.255.255.255)
(255.255.255.255)% Unknown command or computer name, or unable to find computer address
C3825-FTN-OFFICE#conf t
Enter configuration commands, one per line. End with CNTL/Z.
C3825-FTN-OFFICE(config)#no ip domain lookup !<--- disable ไม่ให้มันไป resolve dns
C3825-FTN-OFFICE(config)#exit
C3825-FTN-OFFICE#xxx !<--- อีกรอบลองใส่ผิดอีก
Translating "xxx" ! <--- มันดันไป translate อะไรอีกล่ะเนี่ย

Translating "xxx"

Translating "xxx"
% Unknown command or computer name, or unable to find computer address
C3825-FTN-OFFICE#conf t
Enter configuration commands, one per line. End with CNTL/Z.
C3825-FTN-OFFICE(config)#line vty 0 4
C3825-FTN-OFFICE(config-line)#transport preferred none !<---- นี้เลยไป disable มันซ่ะเลย
C3825-FTN-OFFICE(config-line)#
C3825-FTN-OFFICE#xxx
^
% Invalid input detected at '^' marker. !<--- ค่อย make sense หน่อยว่าเราใส่ cmd ผิด

C3825-FTN-OFFICE#

[Cisco] การ Ping test ระบุ options

การ ping test เราควรกำหนด pattern ของ data ที่ส่งออกไปเพื่อ test การตอบสนอง bit 0,1 ซึ่ง data ค่า default 0xABCD และถ้าต้องการกำหนด size ของ packet
- กำหนด pattern ของ DATA
#ping ip 192.168.1.1 data FFFF repeat 100
and
#ping ip 192.168.1.1 data 0000 repeat 100
- กำหนด size ของ packet แต่ถ้าเกิน MTU จะ ถูก defrag
#ping ip 192.168.1.1 repeat 100 size 2000
- กำหนด size ของ packet และ set DF bit (dont' fragment bit)
#ping ip 192.18.1.1 repeat 100 size 2000 df-bit
- ระบุ source ip address
#ping ip 192.168.1.1 repeat 100 source 172.16.1.1
or
#ping ip 192.168.1.1 repeat 100 source Serial0/0 !-- ระบุ source ip เป็นของ serial0/0

Thursday, March 29, 2007

[Cisco] เขียน script tcl บน router

Cisco ก็สามารถเขียน script TCL ได้น่ะครับ ตัวอย่างต้องการ ping ไปหลายๆ ip

#tclsh ! เรียกใช้ tcl shell
foreach ip {
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
} { puts [ ping $ip source loopback0 repeat 100 ] }

! ก็จะเห็น Output
! ถ้าต้องการ ออกจาก tcl shell
#tclquit

เราสามารถเอาไป apply เพื่อใช้งาน script อื่นๆได้

[Cisco] เคยลอง ping test จำนวนมาก ไปที่ CAT65xx ตัวเอง แล้ว show proc cpu สูงมาก

วิธีแก้ไขให้ไปทำการ police icmp ที่ control-plane
แต่ผลของการ config จะไม่มีผลกับการ ping ผ่านตัว router ออกไป น่ะครับ จะมีผลเฉพาะกับการ ping มาที่ตัว router เท่านั้น
#conf t
ip access-list extended DDOS
permit icmp any any
class-map DDOS
match access-group name DDOS
policy-map CONTROL_PLANE
class DDOS
police 128000 conform-action transmit exceed-action drop violate-action drop
control-plane
service-policy input CONTROL_PLANE
end
#show policy-map control-plane
เท่านี้เรียบร้อยแล้ว ping มาที่ตัว router เท่าไหร่ก็ cpu ไม่สูง

[Cisco] ให้เก็บ config เป็น Archive log เวลา write mem ทุกครั้ง

เวลาเราต้องการดู log config เก่าๆมักจะมีปัญหา เพราะอาจจะไม่มีการเก็บไว วิธีนี้จะทำการเก็บ config ไว้ทุกครั้งที่ทำการ write mem ....
IOS version ใหม่ๆหน่อยน่ะครับ
เราจะทำ archive configไปเก็บไว้ใน flash ง่ายสุด

#mkdir flash:config-backup !<-- สร้าง directory ก่อนเพื่อเก็บ config
#conf t
archive
path flash:config-backup/config
maximum 14
write-memory
end
เสร็จแล้วต้องลองทดสอบดู
#wr
#show archive
There are currently 7 archive configurations saved.
The next archive file will be named flash:config-backup/config-7
Archive # Name
0
1 flash:config-backup/config-1
2 flash:config-backup/config-2
3 flash:config-backup/config-3
4 flash:config-backup/config-4
5 flash:config-backup/config-5
6 flash:config-backup/config-6 <- Most Recent
7
8
9
10
11
12
13
14
Ok จะเห็น config เก็บไว้

รู้จัก traceroute


คำสั่ง traceroute ในแต่ล่ะอุปกรณ์จะใช้ protocol ไม่เหมือนกันน่ะครับ บางครั้งเราอาจจะใช้ router trace ได้แต่ใช้ windows trace ไม่ได้อาจจะเป็นเพราะปลายทางมีการ block protocol บางประเภทเท่านั้น
Cisco ใช้ UDP ในคำสั่ง traceroute (udp port number 33434)
Windows ใช้ ICMP ในคำสั่ง tracert
Linux สามารถใช้ ICMP หรือ UDP ในคำสั่ง traceroute
การทำงาน(อ้างอิง Cisco ใช้ UDP port 33434)
1. ตัวอุปกรณ์ source จะทำการส่ง packet ออกไป 3 packet โดยชุดแรกก็จะ set TTL เป็น 1 เมื่อ router hop แรกโดยปกติเมื่อรับ packet ก็จะทำการลดค่า TTL ลง 1 ฉะนั้นเมื่อจะทำให้ TTL มีค่าเท่ากับ 0 ตัว router ก็จะส่ง ICMP message กลับไปบอก source ด้วย ICMP type time-exceed ทำให้ source รู้ว่า next hop แรกเป็น ip อะไร
2. Source จะทำการส่ง packet ออกครั้งที่ 2 แต่จะ set TTL เป็น 2 ซึ่งเมื่อ packet ผ่านแต่ละ router ก็จะมีการลดค่า TTL ทีล่ะ 1 ซึ่งเมื่อ router hop ที่ 2 ทำการลดค่า TTL ลงทำให้ TTL=0 router ก็จะส่ง ICMP type time-exceed กลับไปบอก source ก็เลยทำให้ source รู้ว่า hop ที่ 2 เป้น ip อะไร
3. Source จะทำการส่ง packet ออกไปแต่ล่ะครั้งก็จะเพิ่ม TTL ครั้งล่ะ 1 ทำให้ในแต่ล่ะ hop ตัว source รู้ว่าเป็น ip อะไรเพราะดูจาก ICMP time-exceed ที่ส่งกลับมา
4. เมื่อ packet ไปถึง destination ปรากฏว่า เมื่อ destination รับ packet เข้ามาเป็น udp port 33434 ซึ่ง destination ไม่ได้เปิด udp port 33434 นี้ ก็จะส่ง ICMP type port-unreachable กลับไปหา source ซึ่งจะทำให้ source รู้ว่า packet นี้กลับมาจาก destination จริงๆ

[Cisco] command ใน cisco สำหรับ test aaa

ต้องการ performance testing ของ aaa
#conf t
aaa new-model
aaa authentication login default group radius local
radius-server host 192.168.1.1 key cisco

#test aaa group radius USERNAME PASSWORD new-code count 1000 rate 100

[Mac] จน เครียด อยากได้ MacBook

acตอนนี้มีอาการบ้า อยากได้ macbook 2.0G black มาใช้เล่นจัง ต้องมาระบายใน blog

[Linux] เขียนแต่ cisco มาเยอะแล้วอยากเก็บ script firewall ง่ายๆเอาใว้ใช้เอง

เขียนแต่ cisco มาเยอะแล้วอยากเก็บ script firewall ง่ายๆเอาใว้ใช้เอง เวลา install linux จะได้ copy ไปใช้เลย
#vi rc.firewall
#! /bin/sh

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

do_start() {

iptables -A INPUT -i lo -j ACCEPT

## syn-flodding protection
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j LOG --log-prefix "FIREWALL SYN-FLOOD: "
iptables -A syn-flood -j DROP

iptables -A INPUT -p udp -m udp -s 0/0 --sport 53 -d 0/0 -j ACCEPT

## Make sure NEW tcp connections are SYN packets
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Allow deluge bittorrent open tcp port 53045
iptables -A INPUT -p tcp -m tcp --dport 53045 --syn -j ACCEPT
## Allow ssh open tcp port 22
iptables -A INPUT -p tcp -m tcp --dport 22 --syn -j ACCEPT

iptables -A INPUT -p udp -j LOG --log-prefix "FIREWALL UDP-IN: "
iptables -A INPUT -p udp -j DROP
iptables -A INPUT -p icmp -j LOG --log-prefix "FIREWALL ICMP-IN: "
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -p tcp -j LOG --log-prefix "FIREWALL TCP-IN: "
iptables -A INPUT -p tcp -j DROP
iptables -A INPUT -j LOG --log-prefix "FIREWALL PROTO-X-IN: "
iptables -A INPUT -j DROP

}

do_stop() {
iptables -F
iptables -X
iptables -Z
}

case "$1" in
start)
echo "Starting Firewall..."
do_start
;;
stop)
echo "Stopping Firewall..."
do_stop
;;

restart)
echo "Restarting Firewall..."
do_stop
sleep 2
do_start
;;

*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac

exit 0

[Cisco] อยากจะ decrypt password ที่เราตั้งไว้ใน cisco router

พอดีลืม password ของ router แต่มันถูก encrypt ไว้ แต่มี config ของเก่าเก็บไว้ไม่อยากจะ recovery password ทำไงดี...ไม่มี program decrypt ด้วย พอดีมี trick ซึ่งใช้ได้เฉพาะที่เป็น type 7 เท่านั้น เช่นใน router มีการ config

username admin password 7 112A3036343D
เราต้องการ decrypt 7 112A3036343D ว่าเป็นอะไร
Router(config)#key chain TEST
Router(config-keychain)#key 1
Router(config-keychain-key)#key-string 7 112A3036343D
Router(config-keychain-key)#end
Router#sh key chain TEST
Key-chain TEST:
key 1 -- text "CISCO" ! <--- this is result from decrypt accept lifetime (always valid) - (always valid) [valid now] send lifetime (always valid) - (always valid) [valid now]
เรียบร้อยรู้แล้วว่าเป็น key อะไร......

[Cisco] จะ config access-list ให้ทำงานในช่วงเวลา

ตัวอย่างต้องการ permit ip any เฉพาะในช่วงเวลาทำงาน
R1#conf t
time-range WorkHours ! สร้าง time-range ชื่อ WorkHours
periodic weekdays 8:30 to 17:30 ! กำหนดช่วงเวลาทุกวันจันทร์ - ศุกร์ เวลา 08:30 - 17:30
access-list 100 permit ip any any time-range WorkHours ! access-list อ้างไปใช้ time-range
interface s0/0
ip access-group 100 in ! apply ใน interface

[Cisco] อยากตั้งเวลาให้ save config ใน router เหมือน crontab ใน linux

ตั้งเวลา run command ใน Cisco คล้าย crontab ใน linux
Ex. ตัวอย่างต้องการ save config ทุกๆ 5 นาที
R1#conf t
kron occurrence BACKUP in 5 recurring ! สร้าง kron ชื่อ BACKUP ให้ run ทุกๆ 5 นาที
policy-list BACKUP ! มีการเรียกใช้ policy-list BACKUP
!
kron policy-list BACKUP ! สร้าง policy-list ชื่อ BACKUP
cli write ! run command: write
!
! ตรวจสอบการทำงานของ kron
R1#show kron schedule
Kron Occurrence Schedule
BACKUP inactive, will run again in 0 days 00:04:3

[Cisco] Cisco router ก็สร้างเมนูก็ได้น่ะ

ไม่รู้ว่าจะเริ่มต้นยังไงเอาเป็นว่าเรามา config Cisco router ให้มีเมนูใช้เวลาเรา login เข้ามา

ต้องการสร้าง menu โดยมี command ให้ใช้ 4 items คือ
ถ้าเลือก 1 ping to R5 with ip 150.1.5.5
2 ping to R6 with ip 150.1.6.6
3 traceroute to R5 with ip 150.1.5.5
4 traceroute to R5 with ip 150.1.6.6
5 exit ออกจาก menu
menu MAIN-MENU clear-screen
menu MAIN-MENU title Title Menu for MAIN-MENU <---------- แสดง title menu menu MAIN-MENU line-mode <---- เพื่อต้องการให้ key enter เมื่อเลือก item โดยปกติถ้าเรากด key มันจะทำงานตาม item นั้นทันที menu MAIN-MENU text 1. Ping to R5 <--- แสดงข้อความ "Ping to R5" menu MAIN-MENU command 1. ping 150.1.5.5 <---- item ที่ 1 ให้ run command : ping 150.1.5.5 menu MAIN-MENU text 2. Ping to R6 menu MAIN-MENU command 2. ping 150.1.6.6 menu MAIN-MENU text 3. Traceroute to R5 menu MAIN-MENU command 3. trace 150.1.5.5 menu MAIN-MENU text 4. Traceroute to R6 menu MAIN-MENU command 4. trace 150.1.6.6 menu MAIN-MENU text 5. Exit menu MAIN-MENU command 5. exit menu MAIN-MENU prompt CPlease Selection menu: <--- แสดง prompt และ รับ key item ที่เลือก
เวลาเราลบ menu เราไม่สามารถเลือกลบบางบรรทัดได้
no menu MAIN-MENU
เมื่อเราสร้างเมนูขึ้นมาแล้วเราจะต้องไป apply เพื่อใช้งานด้วย
username test password cisco
username test autocommand menu MAIN-MENU <---- ใช้ autocommand เมื่อ username test login เข้ามาให้เรียกใช้ menu MAIN-MENU ทันที
line vty 0 4
login local <---- ให้เลือกใช้ authen ผ่าน local system
มาดู output
-----------------
Title Menu for MAIN-MENU
1. Ping to R5
2. Ping to R6
3. Traceroute to R5
4. Traceroute to R6
5. Exit
Please Selection menu:6
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 150.1.6.6, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 60/176/304 ms

[Cisco] Config Cisco870 ต่อ ADSL

พอดีลูกค้าให้ผม config Cisco870 เชื่อมต่อ ADSL ของ true เลยเอา config มาแบ่งกัน
ผมใช้ IOS version นี้ และต้องขอโทษด้วยครับที่ไม่มี show status พอดีลืม capture ไว้....

Cisco IOS Software, C870 Software (C870-ADVIPSERVICESK9-M), Version 12.4(11)T, RELEASE SOFTWARE (fc2)
ตัวอย่างการ config
Router#sh run
Building configuration...

Current configuration : 1377 bytes
!
version 12.4
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname Router
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
ip cef
!
!
no ip dhcp use vrf connected
!
ip dhcp pool DEFAULT
network 172.25.0.0 255.255.255.0
default-router 172.25.0.254
dns-server 203.144.207.29 203.144.207.49
!
!
!
multilink bundle-name authenticated
!
interface ATM0
mtu 1492
no ip address
no atm ilmi-keepalive
pvc 0/100
encapsulation aal5snap
pppoe-client dial-pool-number 1
!
dsl operating-mode auto
!
interface FastEthernet0
!
interface FastEthernet1
!
interface FastEthernet2
!
interface FastEthernet3

!
interface Vlan1
ip address 172.25.0.254 255.255.255.0
ip nat inside
ip virtual-reassembly
!
interface Dialer1
ip address negotiated
ip nat outside
ip virtual-reassembly
encapsulation ppp
dialer pool 1
dialer-group 1
ppp pap sent-username USERNAME password PASSWORD
!
ip route 0.0.0.0 0.0.0.0 Dialer1
!
!
no ip http server
no ip http secure-server
ip nat inside source list 1 interface Dialer1 overload
!
access-list 1 permit 172.25.0.0 0.0.0.255
dialer-list 1 protocol ip permit
!
!
!
!
control-plane
!
!
line con 0
no modem enable
transport output all
line aux 0
line vty 0 4
login
!
scheduler max-task-time 5000

end


[Cisco] Config ให้ Cisco router เป็น PPPoE server

พอดีหัวหน้าอยากได้ให้ Cisco router สามารถทำเป็น pppoe server ใน LAN แล้วให้ user ใน LAN connect ผ่าน PPPoE ก่อนออกไป internet โดยใช้ username/password จาก radius server.

network diagram..
{internet cloud}<----->[ g0/0 Cisco2800 g0/1 ]<----->[ PC .(pppoe client) ]

aaa authentication login PPPoE group radius local
aaa authentication ppp PPPoE group radius local
aaa authorization network PPPoE group radius local
aaa accounting exec PPPoE start-stop group radius
aaa accounting network PPPoE start-stop group radius

bba-group pppoe global
virtual-template 1
sessions auto cleanup

interface GigabitEthernet0/0
description *** public internet ***
ip address x.x.x.x 255.255.255.252
load-interval 30
duplex auto
speed auto
ip nat outside
end

interface GigabitEthernet0/1
description *** PPPoE ***
ip address 192.168.222.1 255.255.255.0
load-interval 30
duplex auto
speed auto
pppoe enable group global
end

interface Virtual-Template1
ip unnumbered GigabitEthernet0/0
ip nat inside
ip virtual-reassembly
peer default ip address pool PPPoE_POOL
ppp authentication pap PPPoE
ppp authorization PPPoE
ppp accounting PPPoE
!

ip local pool PPPoE_POOL 192.168.234.1 192.168.234.254
ip nat inside source list 1 interface GigabitEthernet0/0 overload

radius-server host 192.168.222.2 key cisco
access-list 1 permit 192.168.234.0 0.0.0.255


[linux] อยากทำ ramdisk ใน linux

อันเนื่องมาจากต้องการเขียนและอ่านไฟล์เร็วๆ ไว้สำหรับเป็น temp ไฟล์เลยต้องสร้าง ramdisk แล้วไปใช้เนื้อที่ตรงส่วนนั้น เริ่มต้นเลยดีกว่า
ผมใช้ linux Ubuntu 7.04 (feisty) ครับ
sudo vi /boot/grub/menu.lst
เพิ่มตรงบรรทัด kernel ตรงท้ายบรรทัด ramdisk_size=256000 (หน่วยเป็น K) แล้ว reboot
พอ reboot ให้ตรวจสอบโดย
#dmesg | grep RAM
RAMDISK driver initialized: 16 RAM disks of 256000K size 1024 blocksize
จากนั้นเราสร้างเป็น script ไว้เรียกใช้
vi make_ramdisk.sh
#!/bin/sh
dd if=/dev/zero of=/dev/ram0 bs=1k count=256000
mke2fs -vm0 /dev/ram0 256000
mkdir -p /mnt/ramdisk
mount /dev/ram0 /mnt/ramdisk

จัดการให้มันสามารถ execute ได้
#sudo chmod 755 make_ramdisk.sh

เริ่มต้นที่จะมี blog เป็นของตัวเอง....

ไม่รู้เป็นไงอยากมี blog เป็นของตัวเองให้ชาวบ้านมาอ่านดู...............แบ่งปันความรู้ (หรือความโง่) ออกมาให้สาธารณะชน ยืมคำจาก www.pantip.com ว่า "ไม่มีใครรู้ในทุกๆ อย่าง เรารู้ในสิ่งที่ผู้อื่นไม่รู้ มากเท่ากับที่ไม่รู้ในสิ่งที่ผู้อื่นรู้"