News for the ‘tech’ Category

CentOS6 and DHCP server with vlan

โจทย์ไม่ยาก ไม่ง่าย … แค่ไม่เคยทำ

ความต้องการ

1. dhcp server บน CentOS6
2. แจก ip-address บน subnet ตามต้องการ
3. มี switch layer 2 เป็นตัวแยก vlan

ิวิธีทำ

1. สร้าง vlan id ใน switch ก่อน
ตัวอย่าง

2. ติดตั้ง dhcp server , vconfig

# yum install dhcp vconfig -y

3. load module 802.1q

# modprobe 8021q

check :

# lsmod | grep 8021q
8021q                  19587  0 
garp                    5901  1 8021q

4. สร้าง vlan interfaces

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.2
DEVICE="eth0.2"
ONBOOT="yes"
BOOTPROTO=none
VLAN="yes"
IPADDR=10.156.3.2
NETMASK=255.255.255.0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.3
DEVICE="eth0.3"
ONBOOT="yes"
BOOTPROTO=none
VLAN="yes"
IPADDR=10.156.4.2
NETMASK=255.255.255.0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.4
DEVICE="eth0.4"
ONBOOT="yes"
BOOTPROTO=none
VLAN="yes"
IPADDR=10.156.5.2
NETMASK=255.255.255.0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.5
DEVICE="eth0.5"
ONBOOT="yes"
BOOTPROTO=none
VLAN="yes"
IPADDR=10.156.6.2
NETMASK=255.255.255.0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.6
DEVICE="eth0.6"
ONBOOT="yes"
BOOTPROTO=none
VLAN="yes"
IPADDR=10.156.7.2
NETMASK=255.255.255.0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.7
DEVICE="eth0.7"
ONBOOT="yes"
BOOTPROTO=none
VLAN="yes"
IPADDR=10.156.9.2
NETMASK=255.255.255.0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.8
DEVICE="eth0.8"
ONBOOT="yes"
BOOTPROTO=none
VLAN="yes"
IPADDR=10.156.11.2
NETMASK=255.255.255.0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.9
DEVICE="eth0.9"
ONBOOT="yes"
BOOTPROTO=none
VLAN="yes"
IPADDR=10.156.13.2
NETMASK=255.255.255.0

5. สร้าง /etc/dhcp/dhcpd.conf

ddns-update-style interim;
ignore client-updates;

authoritative;

subnet 10.156.3.0 netmask 255.255.255.0 {
 option routers      10.156.3.1;                                
 option subnet-mask  255.255.255.0;
 option domain-name-servers 208.67.222.222,8.8.8.8;
 option time-offset  -18000; # Eastern Standard Time
 range dynamic-bootp 10.156.3.21 10.156.3.200;                  
 default-lease-time 21600;
 max-lease-time 43200;
}
subnet 10.156.4.0 netmask 255.255.255.0 {
 option routers      10.156.4.1;                                
 option subnet-mask  255.255.255.0;
 option domain-name-servers 208.67.222.222,8.8.8.8;
 option time-offset  -18000; # Eastern Standard Time
 range dynamic-bootp 10.156.4.21 10.156.4.200;                  
 default-lease-time 21600;
 max-lease-time 43200;
}
subnet 10.156.5.0 netmask 255.255.255.0 {
 option routers      10.156.5.1;                                
 option subnet-mask  255.255.255.0;
 option domain-name-servers 208.67.222.222,8.8.8.8;
 option time-offset  -18000; # Eastern Standard Time
 range dynamic-bootp 10.156.5.21 10.156.5.200;                  
 default-lease-time 21600;
 max-lease-time 43200;
}
subnet 10.156.6.0 netmask 255.255.255.0 {
 option routers      10.156.6.1;                                
 option subnet-mask  255.255.255.0;
 option domain-name-servers 208.67.222.222,8.8.8.8;
 option time-offset  -18000; # Eastern Standard Time
 range dynamic-bootp 10.156.6.21 10.156.6.200;                  
 default-lease-time 21600;
 max-lease-time 43200;
}
subnet 10.156.7.0 netmask 255.255.255.0 {
 option routers      10.156.7.1;                                
 option subnet-mask  255.255.255.0;
 option domain-name-servers 208.67.222.222,8.8.8.8;
 option time-offset  -18000; # Eastern Standard Time
 range dynamic-bootp 10.156.7.21 10.156.7.200;                  
 default-lease-time 21600;
 max-lease-time 43200;
}
subnet 10.156.9.0 netmask 255.255.255.0 {
 option routers      10.156.9.1;                                
 option subnet-mask  255.255.255.0;
 option domain-name-servers 208.67.222.222,8.8.8.8;
 option time-offset  -18000; # Eastern Standard Time
 range dynamic-bootp 10.156.9.21 10.156.9.200;                  
 default-lease-time 21600;
 max-lease-time 43200;
}
subnet 10.156.11.0 netmask 255.255.255.0 {
 option routers      10.156.11.1;                               
 option subnet-mask  255.255.255.0;
 option domain-name-servers 208.67.222.222,8.8.8.8;
 option time-offset  -18000; # Eastern Standard Time
 range dynamic-bootp 10.156.11.21 10.156.11.200;                
 default-lease-time 21600;
 max-lease-time 43200;
}
subnet 10.156.13.0 netmask 255.255.255.0 {
 option routers      10.156.13.1;                               
 option subnet-mask  255.255.255.0;
 option domain-name-servers 208.67.222.222,8.8.8.8;
 option time-offset  -18000; # Eastern Standard Time
 range dynamic-bootp 10.156.13.21 10.156.13.200;                
 default-lease-time 21600;
 max-lease-time 43200;
}

ปล. ปรับได้ตามความเหมาะสม

6. แก้ไข /etc/sysconfig/dhcpd

DHCPDARGS=eth0.2
DHCPDARGS=eth0.3
DHCPDARGS=eth0.4
DHCPDARGS=eth0.5
DHCPDARGS=eth0.6
DHCPDARGS=eth0.7
DHCPDARGS=eth0.8
DHCPDARGS=eth0.9

ปล. ปรับได้ตามความเหมาะสม

7. start ซะ!

# service dhcpd start
Posted: September 21st, 2011
Categories: how-to, linux, tech
Tags: , ,
Comments: 3 Comments.

CentOS6 and scp

หลังจากที่ลง CentOS6 แบบ minimal จะพบว่า เราใช้คำสั่ง scp ไม่ได้ ….

bash: scp: command not found
lost connection

แก้ไขโดยการ ติดตั้ง openssh-clients

yum install openssh-clients

Posted: August 31st, 2011
Categories: how-to, tech
Tags: ,
Comments: No Comments.

guru

Posted: May 23rd, 2011
Categories: life, linux, tech
Tags: , , ,
Comments: No Comments.

ปัญหาเรื่องเสียงของ elastix เมื่อใช้ dynamic ip address

|

Q : คู่สนทนาไม่ได้ยินเสียงพูดของอีกฝ่ายเมื่อติดตั้ง elastix บน ADSL ที่เป็น dynamic IP.
A : เรื่องมันยาว…
โดยปกติเมื่อเราใช้งาน Elastix ที่มี ip จริง เราจะสามารถโทรหากันได้อย่างมีความสุขทั้งฝั่งโทรและฝั่งรับเสียงใสแจ๋ว
แต่เมื่อเราใช้บน ADSL ที่มี ip address เป็นแบบ dynamic ก็จะเกิดปัญหา ได้ยินมั่ง ไม่ได้ยินมั่ง หรือ ไม่ได้ยินเลย

หนึ่งในวิธีแก้ (ปัจจัยของ VoIP มีเยอะดังนั้นขอเรียกว่าเป็นหนึ่งในวิธีแก้)
คือ การทำให้ Elastix รู้จักว่าตัวเองมี ip address อะไรโดยแก้ไขค่า /etc/asterisk/sip_nat.conf

How-to

# vi /etc/asterisk/sip_nat.conf
ใส่ค่าเหล่านี้ลงไป
nat =yes
externip =58.8.8.8
localnet =192.168.1.0/255.255.255.0
qualify =yes
externrefresh =10

ค่า externip จะเป็น ip address ของเราที่ใช้อยู่ขณะนั้น โดยดูได้จากตัว router หรือ http://whatismyip.com
ค่า localnet ให้แก้ไขเป็นวง network ของ Elastix

จบ

แต่เนื่องจาก เราใช้ ADSL นั่นหมายความว่าทุกครั้งที่เรา disconnect แล้ว connect ใหม่ เราจะได้ ip address ใหม่
ดังนั้นเราจึงต้องทำ script สำหรับให้ Elastix เปลี่ยน ip address ให้โดยอัตโนมัติ

# touch /var/lib/asterisk/agi-bin/checkip.pl
# chown asterisk:asterisk /var/lib/asterisk/agi-bin/checkip.pl
# chmod 755 /var/lib/asterisk/agi-bin/checkip.pl
# vi /var/lib/asterisk/agi-bin/checkip.pl
ใส่ค่าเหล่านี้ลงไป

#!/usr/bin/perl
#
# This program gets the current IP address (as assigned by the ISP) from
# whatismyip.org and modifies /etc/asterisk/sip_nat.conf if the external IP
# address has changed. You can Use Webmin to install any missing Perl
# modules, and to invoke the script as cron job that runs every 5 minutes
#
use strict;
use warnings;
use WWW::Mechanize;
use Tie::IxHash;
use Data::Validate::IP qw(is_public_ipv4);
my $s_filepath = “/etc/asterisk/sip_nat.conf”;
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->get(‘http://whatismyip.com/automation/n09230945.asp’);
$mech->success or die ‘Cannot connect to http://whatismyip.com/automation/n09230945.asp’;
my ($ip) = ($mech->content() =~ /(\d+\.\d+\.\d+\.\d+)/);
if (is_public_ipv4($ip)) {
tie my %configvars, ‘Tie::IxHash’;
# The ‘fromdomain’ (& possibly ‘localnet’) values in the next line MUST be changed
%configvars = (‘nat’ => ‘yes’, ‘externip’ => ’0.0.0.0′,’fromdomain’ => ‘foo.dyndns.com’,'localnet’ => ’192.168.0.0/255.255.255.0′) ;
open IN,”<$s_filepath”;
while (my $i = ) {
chop $i;
if ($i =~ /=/) {
$i =~ s/\s//g;
my ($key,$value) = split /=/,$i;
$configvars{$key} = $value;
}
}
close IN;
if ($configvars{‘externip’} ne $ip) {
$configvars{‘externip’} = $ip;
open OUT,”>$s_filepath”;
while (my ($key, $value) = each %configvars) {
select OUT;
print “$key=$value\n”;
};
select STDOUT;
close OUT;
`/usr/sbin/asterisk -rx reload`;
};
};

แก้ไข foo.dyndns.com เป็น dynamic dns domain ที่จดไว้ เช่น sourcode.dyndns.org
แก้ไข 192.168.0.0/255.255.255.0 ให้เป็นวง network ของ Elastix

จากนั้น ทำการทดสอบ script
# cd /var/lib/asterisk/agi-bin
# perl checkip.pl

ซึ่งถ้ามันทำงาน มันจะไม่มีอะไรเกิดขึ้น
ซึ่งถ้าท่านผู้อ่านได้ลองทำตามยังไงก็ error แบบนี้

root@pbx:/var/lib/asterisk/agi-bin $ perl checkip.pl
Can’t locate WWW/Mechanize.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at checkip.pl line 11.
BEGIN failed–compilation aborted at checkip.pl line 11.
root@pbx:/var/lib/asterisk/agi-bin $

ถ้าเจอแบบข้างบนแสดงว่ามาถูกทางละ
ให้แก้ไขตามนี้

# yum install perl-Tie-IxHash.noarch
# yum install perl-Net-Netmask.noarch
# wget ftp://ftp.univie.ac.at/systems/linux/dag/redhat/el5/en/ppc/RPMS.fabian/perl-Data-Validate-IP-0.10-1.el5.rf.noarch.rpm
# rpm -ivh perl-Data-Validate-IP-0.10-1.el5.rf.noarch.rpm

จากนั้นลองทดสอบอีกครั้ง
# cd /var/lib/asterisk/agi-bin
# perl checkip.pl

ครั้งนี้จะไม่เกิด error ละผ่านแน่นอน ถ้าไม่ผ่านให้ย้อนกลับไปทำอีกรอบ !
จากนั้นทำการสร้าง crontab เพื่อให้ script ทำงานทุกชั่วโมง

# crontab -e
ใส่ค่าเหล่านี้ลงไป
0 * * * * perl /var/lib/asterisk/agi-bin/checkip.pl >/dev/null 2>&1

เช็คเพื่อความถูกต้อง
# crontab -l
จะต้องได้ผลลัพย์ออกมาเป็น
0 * * * * perl /var/lib/asterisk/agi-bin/checkip.pl >/dev/null 2>&1

จบ

credit :
http://fonality.com/trixbox/forums/trixbox-forums/help/nat-problems-changed-sipnatconf-and-still-no-audio
http://adminschoice.com/crontab-quick-reference

Posted: July 20th, 2010
Categories: how-to, linux, tech
Tags: , ,
Comments: No Comments.

Potato gun, lightning, and sonic magic: Unconventional speed tests for the browser

บ้าไปแล้ว !

credit : http://chrome.blogspot.com/2010/05/potato-gun-lightning-and-sonic-magic.html

Posted: May 6th, 2010
Categories: cool, tech
Tags: , ,
Comments: No Comments.