2014年9月24日 星期三

RIP 選徑規劃及測試

1、PE及CE有兩條LINK
2、跑RIP
3、有分DATA及VOICE網段 (192.168.2.0 data,192.168.3.0 voice)
4、平常DATA跑第一條,VOICE跑第二條
5、斷第一條時,DATA需能跑到第二條
6、斷第二條線,VOICE不需跑到第一條

router rip
 version 2
 redistribute static
 offset-list 1 out 3 FastEthernet0/1
 network 172.31.0.0
 network 192.168.2.0
 network 192.168.3.0
 distribute-list 1 out FastEthernet0/0
 distribute-list 12 out FastEthernet0/1
!
ip classless
ip route 192.168.2.0 255.255.255.0 192.168.1.254
ip route 192.168.3.0 255.255.255.0 192.168.1.254
!
no ip http server
no ip http secure-server
!
!
access-list 1 permit 192.168.2.0 0.0.0.255
access-list 12 permit 192.168.2.0
access-list 12 permit 192.168.3.0

測試:斷第一條
     172.31.0.0/30 is subnetted, 2 subnets
C       172.31.0.0 is directly connected, FastEthernet0/0
C       172.31.0.4 is directly connected, FastEthernet0/1
R    192.168.2.0/24 [120/4] via 172.31.0.6, 00:00:17, FastEthernet0/1
R    192.168.3.0/24 [120/1] via 172.31.0.6, 00:00:17, FastEthernet0/1

測試:斷第二條
     172.31.0.0/30 is subnetted, 2 subnets
C       172.31.0.0 is directly connected, FastEthernet0/0
C       172.31.0.4 is directly connected, FastEthernet0/1
R    192.168.2.0/24 [120/1] via 172.31.0.2, 00:00:10, FastEthernet0/0

測試:把兩條線都拉起來
     172.31.0.0/30 is subnetted, 2 subnets
C       172.31.0.0 is directly connected, FastEthernet0/0
C       172.31.0.4 is directly connected, FastEthernet0/1
R    192.168.2.0/24 [120/1] via 172.31.0.2, 00:00:02, FastEthernet0/0
R    192.168.3.0/24 [120/1] via 172.31.0.6, 00:00:02, FastEthernet0/1

均符合需求

2014年8月26日 星期二

Tenda N30 真的不能當作旅行AP使用 - 一場悲劇的發生

家裡的電視需要網路線。但再過一段時間後他就再也沒有網路線可以接了。因此有兩個解法:1、電力線網路,2、將Wi-Fi轉成有線網路。

想試試看不用錢的解法。但之前的FON賣的賣送的送,除了跟親朋好友調貨之外,還有沒有解法?

看了一下櫃子,有一台Tenda N30躺在架上。這台機器是申辦寬頻的贈品,但後來拿到TTC的測速用AP後(有gigalan),它就一直被冷凍起來(大概就跟張泰山被凍在bench上一樣久的時間)

作了一下功課,這一台機器的ROM和RAM太小,沒有辦法刷成dd-wrt或openwrt。

看來只能從原廠的firmware來解,幾天前剛好看到有新的firmware,就來試試。

升版了之後,原先的簡中介面變成英文介面,看起來順眼許多。但也陌生許多。

找了一下,Bingo,有選擇WAN介面的功能,就來試試。

殊不知,這是一場災難的發生。

試著將WAN 改成Wi-Fi,順利的抓到家裡的AP,但是後端的電腦一直不能連上線。(此時後端的電腦用來設定N30,和N30是在同一個IP網段的,但沒有設定gateway)

訁了幾次都不行,只好死馬當活馬醫。把WAN介面的PPPoE開起來,再把電腦的gateway指向N30。就可以連線了(我家的VTUR有開硬撥,也有發IP)。但這樣一來,其實將來電視和NAS是無法連線的 (因為電視會透過N30作NAT出Internet,和本來的區網就完全無關了)

只好再換一個方法試試,把N30的WAN設定為DHCP。然後...就悲劇了。
跳出了一個IP網段相衝的訊息,之後N30就失聯了,再也進不去。
原因很簡單,就是N30的WAN和LAN都是192.168.1.X。但不曉得是怎麼設計的,在這種狀況下竟然LAN IP就無法連線了。

我正在思考,是要發給他的WAN不同的DHCP網段,再進去改回原先設定,還是乾脆factory reset算了。反正也沒有什麼特殊的設定。

總之,要透過N30把Wi-Fi轉換回ethernet,是不行的。
還是等FON來再刷機試試吧....

2014年5月28日 星期三

Dongle card (3.5G USB)網卡 如何在 Raspberry Pi安裝

1、先更先及安裝相關套件
sudo apt-get update
sudo apt-get install ppp usb-modeswitch wvdial


2、假設核心有支援的話。就直接lsusb,找出其device id。
# lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 005: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard
在可以看出device id為 12d1:1506

3、modprobe usbserial vendor=0x12d1 product=0x1506
#ls -ls /dev/ttyU*
0 crw-rw---T 1 root dialout 188, 0  5月 29 10:50 /dev/ttyUSB0
0 crw-rw---T 1 root dialout 188, 1  5月 29 10:17 /dev/ttyUSB1
0 crw-rw---T 1 root dialout 188, 2  5月 29 10:49 /dev/ttyUSB2
 可以看出usb modem有三台 (看廠牌和型號,我有遇過五台的)


4、取出訊號品質。訊號的部份在/dev/ttyUSB0

#more /etc/wvdial.conf (預設的設定檔)
[Dialer Defaults]
Init1 = AT+CSQ
Modem Type = USB Modem
ISDN = 0
New PPPD = yes
Modem = /dev/ttyUSB0
Baud = 9600
Username = " "
Password = " "
Phone = " "


#wvdial
-> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: AT+CSQ
AT+CSQ
+CSQ: 16,99
OK
--> Modem initialized.
--> Sending: ATDT
--> Waiting for carrier.
ATDT
ERROR
--> Invalid dial command.
--> Disconnecting at Thu May 29 10:53:01 2014

5、撥號上網的部份。data com的部份使用/dev/ttyUSB2

# more /etc/reconnect.conf
[Dialer Defaults]
Phone = *99#
APN = internet
Username = " "
Password = " "
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1, "IP","Internet"
;Modem Type = Analog Modem
Modem Type = USB Modem
Baud = 460800
New PPPD = yes
Modem = /dev/ttyUSB2
ISDN = 0
Stupid Mode = 1

#/usr/bin/wvdial -C /etc/reconnect.conf & (由於非預設設定檔,因此要指定設定檔所在)

6、附錄
部份卡可能要更新kernel才有支援或者要更新firmware: rpi-update

另外有部份網卡要自行compile再insmode或modprobe。就不一一列舉


7、我本來是用ppp直接撥號,但後來發現wvdial有自動重連功能。二話不說就換成wvdial。
附上ppp相關安裝及設定方式,這邊好像是下載別人寫好的script。一時找不到出處,不過因為後來沒有用到,就先找了。

#apt-get install ppp

#cd /etc/ppp/peers
#more gsm (我們看一下gsm的內容)
-detach
lcp-echo-failure 0
/dev/ttyUSB2
115200
debug
defaultroute
usepeerdns
noauth
user ""
ipcp-max-failure 4
ipcp-accept-local
ipcp-accept-remote
ser/pw combo
noauth
crtscts
lock
connect '/usr/sbin/chat -v -t6 -f /etc/ppp/peers/gsm_chat'

#pppd call gsm &(此時就撥號上去了)

# more gsm_chat (我們看一下gsm_chat的內容)

SAY 'Starting Sierra Wireless GSM connect script...\n'
SAY '\n'

SAY 'Setting the abort string\n'
SAY '\n'
# Abort String ------------------------------
ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT 'NO CARRIER' ABORT DELAYED

SAY 'Initializing modem\n'
# Modem Initialization
'' AT
OK ATZ


SAY '\n'
SAY     'Setting APN\n'

OK     'AT+CGDCONT=1,"IP","internet"'

SAY '\n'
SAY     'Dialing...\n'

OK ATD*99#
CONNECT ''








2014年5月22日 星期四

只開放sftp不開放ssh

1、新增群組 groupadd sftponly

2、建立使用者,將該用戶綁定該群組
  adduser test -d /sftp -G sftponly

3、編輯/etc/ssh/sshd_config,新增下列:
Subsystem sftp internal-sftp

Match group sftponly
     ChrootDirectory /sftp
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

4、新建/sftp/config
mkdir /sftp/config

並設定權限
chown test /sftp/config
chgrp sftponly /sftp/config

5、重啟sshd
/etc/init.d/sshd restart

2014年5月21日 星期三

expect in apache

試expect in PHP一直失敗,只好回頭試expect in apache。不多說,直接看範例吧。

PHP內容如下,就直接呼叫expect,然後丟變數給他而已。
        $command = "/home/www/OM/cgi-bin/test.exp 139.175.240.1 RIPO \"password\" local \"sh ver\"";
        echo $command."
";
        $out = shell_exec($command);
        print_r($out);
?>

test.exp的內容,簡單講一下。在apache裡不能跑shell,所以要用spawn telnet $ne,讓它執行。
由於已經spawn telnet了,所以後面的telnet 就不用跑。

#!/usr/bin/expect -f
set timeout 300
set ne [lindex $argv 0]
set user [lindex $argv 1]
set pass [lindex $argv 2]
set vrf [lindex $argv 3]
set cmd [lindex $argv 4]
log_file -a session_$ne.log

set timeout 10
spawn telnet $ne
expect "login: "
send -- "$user\r"
expect "password:"
send -- "$pass\r"
expect "#"
send -- "ter len 0\r"
expect "#"
send -- "context $vrf\r"
expect "#"
send -- "$cmd\r"
expect "#"
send -- "exit\r"
send -- "exit\r"

2014年2月6日 星期四

如何在Ubuntu 11.10 上 安裝rsyslog 7.4.9

終於想起為何一定要更新版本了。原因是舊版的無法幫你依來源IP分檔。


更新一下apt source
apt-get update



//apt-get install libestr-dev //版本太舊,要自己手動裝新版的(要0.1.9以上)

wget http://libestr.adiscon.com/files/download/libestr-0.1.9.tar.gz
 tar xvzf libestr-0.1.9.tar.gz
 cd libestr-0.1.9
  ./configure
  make && make install

apt-get install libjson0-dev
apt-get install python-docutils

liblogging找不到有人包好的,所以自己弄。
我們要的是裡面的libstdlog.h和libstdlog.so
wget http://ftp5.gwdg.de/pub/linux/archlinux/community/os/x86_64/liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
tar xvf liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
cd /usr/src/usr/lib/
mv * /usr/lib
cd ../include/
mv * /usr/include/

apt-get install uuid-dev
apt-get install libgcrypt11-dev
apt-get install libmysqld-dev

wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-7.4.9.tar.gz
tar xvzf rsyslog-7.4.9.tar.gz
cd rsyslog-7.4.9
./configure --prefix=/opt/rsyslog --enable-mysql PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/  \
LIBLOGSTD_CFLAGS=/usr/local/include/liblogging LIBLOGSTD_LIBS=/usr/lib/libstdlog.so

make && make install

cd /opt/rsyslog/lib/rsyslog
cp * /lib
cp * /lib64/


cd /usr/sbin/
mv rsyslogd rsyslogd.old
cd /opt/rsyslog/sbin/
mv rsyslogd  /usr/sbin/

service rsyslog stop
service rsyslog start

2014年1月27日 星期一

如何在Fedora 上 安裝rsyslog 7.4.9

舊的rsyslog,對於Cisco ASR的支援很差,因此直接裝上新版。

過程有點麻煩,記錄備查。

先安裝libestr:

 wget http://libestr.adiscon.com/files/download/libestr-0.1.9.tar.gz
 tar xvzf libestr-0.1.9.tar.gz
 cd libestr-0.1.9
  ./configure
  make && make install

再安裝json:
wget https://github.com/json-c/json-c/archive/json-c-0.11-20130402.tar.gz --no-check-certificate
tar xvzf json-c-0.11-20130402
cd json-c-json-c-0.11-20130402
./configure
make && make install

接著安裝docutils:
wget https://pypi.python.org/packages/source/d/docutils/docutils-0.11.tar.gz --no-check-certificate
tar xvzf docutils-0.11.tar.gz
cd docutils-0.11
python setup.py install
ln -s /usr/bin/rst2man.py /usr/bin/rst2man

再來安裝liblogging,我們要的是裡面的libstdlog.h和libstdlog.so
wget http://ftp5.gwdg.de/pub/linux/archlinux/community/os/x86_64/liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
tar xvf liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
cd /usr/src/usr/lib/
mv * /usr/lib
cd ../include/
mv * /usr/include/

再安裝uuid相關套件
yum -y install uuid uuid-devel libuuid libuuid-devel

再補一下libgrcypt套件與發展程式:
yum -y install libgcrypt libgcrypt-devel

最後回到重頭戲:
wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-7.4.9.tar.gz
tar xvzf rsyslog-7.4.9.tar.gz 
cd rsyslog-7.4.9
./configure --prefix=/opt/rsyslog --enable-mysql PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ LIBLOGSTD_CFLAGS=/usr/local/include/liblogging LIBLOGSTD_LIBS=/usr/lib/libstdlog.so
make && make install

停掉原有的rsyslog,再執行新的就ok了。

理論上 LD_LIBRARY_PATH要把剛剛的libstdlog.so所在的目錄export出去,不然會找不到。

但這樣做的時候service rsyslog restart會找不到so檔。

因此最後的解法是:
cp /opt/rsyslog/lib/rsyslog/libstdlog.so* /lib64/

正規的解釋如下:

Libraries have been installed in:
   /opt/rsyslog/lib/rsyslog

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

參考網頁:http://www.07net01.com/storage_networking/Rsyslog__loganalyzerrizhifuwuqidajian_586293_1379322838.html

2014年1月13日 星期一

rrdtool 出小圖時資料會變動?

有一個新案子。需求大概是這樣。
1、測試某幾個特殊網頁的access time和ping latency
2、測試ftp網站的上傳及下載速度
3、將之輸出為pdf檔。

所以我的作法是
1、用rrdtool來處理儲存及繪圖的部份
2、用fpdf來出pdf檔。將前述的圖及表包起來。

但作完後有一個問題。同一個時間區段的資料,用大圖和小圖竟然會有不同的輸出結果:
例如:
大圖727x233



可以看出,Maximum是115.64,





小圖267x121,Maximum竟然變成了89,

 猜想是因為x軸沒有辦法畫到最右邊的關係。但...取值時是損讀取RRD檔,怎麼會和graph有關?

似乎沒有什麼好解法,使用--full-size-mode 可以暫時排除,並且只保留Y軸的大小。(圖變成了400x80)
但這樣圖會變的很醜...像這樣。我如果出這種圖應該會被打死吧。




所以不得不找其它解,其中一個解法就是先產出大圖,再用imagemagic來把它轉成小圖,但這樣會變的很小很糊...
語法如下: ( 727x205 to )
convert facebook-latency.png -resize 20%  facebook-latency.png





或者圖型會變的很胖,即使把Y軸的說明文字拿掉也一樣難看。
嵌入PDF檔後,更是失敗。
試了一個小時,沒有什麼好辦法。只好從其它方面著手。

就是從pdf的產出程式來動手,最後在輸出image檔時,強制指定尺寸為95*40,順利結案。
看來fpdf縮圖的功力不錯。
 $pdf->Image("$PATH/facebook-latency.png",10,110,95,40,'PNG');

最後貼一下出的pdf檔。其實因為+8的問題也弄了很久。
之後是直接說這個報表是昨天08:00 到今天08:00的就好。
否則如果真的圖檔也要從00:00到00:00,那我就必需直接讀rrd作運算,而不能使用rrdfetch的功能來直接讀檔了。