Transparent proxy with Squid and Cisco router

[Network Diagram]
[LAN:Client]<——>[Cisco Router]<——–>{Internet Clound}<——–>[Linux]
Loopback Interface: 10.10.255.4/32
LAN Interface: 10.10.255.128/26
Internet Interface: 10.10.210.150/30
Linux box: 10.10.175.36
Reference h**p://inetpro.org/wiki/Squid_WCCP
Configuration on Linux (Ubuntu 10.10 Server)
$ sudo apt-get install squid3
$ sudo vi /etc/squid3/squid.conf
http_port 3128 intercept
acl lan_client src 10.10.255.128/26
http_access allow lan_client
wccp2_router 10.10.210.150
wccp_version 4
wccp2_forwarding_method gre
wccp2_return_method gre
wccp2_assignment_method hash
wccp2_service standard 0 password=cisco
$ modprobe ip_gre
$ ip tunnel add wccp0 mode gre remote 10.10.255.4 local 10.10.175.36 dev eth0
$ ifconfig wccp0 1.1.1.1 netmask 255.255.255.255 up
$ sudo vi /etc/sysctl.conf
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
$sudo sysctl -p
IPTABLES Rules
$ sudo iptables -A INPUT -p udp -s 10.10.210.150 –dport 2048 -j ACCEPT
$ sudo iptables -A INPUT -p 47 -s 10.10.255.4 -j ACCEPT
$ sudo iptables -t nat -A PREROUTING -i wccp0 -p tcp –dport 80 -j REDIRECT –to-port 3128
$ sudo /etc/init.d/squid3 start
$ ip tunnel show
gre0: gre/ip  remote any  local any  ttl inherit  nopmtudisc
wccp0: gre/ip  remote 10.10.255.4  local 10.10.175.36  dev eth0  ttl inherit
$ ifconfig wccp0
wccp0     Link encap:UNSPEC  HWaddr 3D-5A-AF-24-00-00-88-E0-00-00-00-00-00-00-00-00
inet addr:1.1.1.1  P-t-P:1.1.1.1  Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1
RX packets:1744 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:272018 (272.0 KB)  TX bytes:0 (0.0 B)
$ sudo tail -f /var/log/squid3/cache.log
$ sudo tail -f /var/log/squid3/access.log
#==============================================
Configuration on Cisco Router
#sh ver
Cisco IOS Software, 3800 Software (C3825-ADVIPSERVICESK9-M), Version 12.4(10), RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2006 by Cisco Systems, Inc.
Compiled Wed 16-Aug-06 05:13 by prod_rel_team
conf t
ip wccp web-cache version 2
ip wccp web-cache redirect-list wccp_client password cisco
ip access-list standard wccp
permit 10.10.255.131
interface loopback0
ip address 10.10.255.4 255.255.255.255
interface x/y
desc ## LAN ##
ip address 10.10.255.129 255.255.255.192
ip wccp web-cache redirect in
interface x/y
desc ## Internet ##
ip address 10.10.210.150 255.255.255.252
#sh ip wccp web-cache
Global WCCP information:
Router information:
Router Identifier:                   10.10.255.4
Protocol Version:                    2.0
Service Identifier: web-cache
Number of Service Group Clients:     1
Number of Service Group Routers:     1
Total Packets s/w Redirected:        2176
Process:                           3
Fast:                              0
CEF:                               2173
Redirect access-list:                wccp_client
Total Packets Denied Redirect:       648454
Total Packets Unassigned:            0
Group access-list:                   -none-
Total Messages Denied to Group:      0
Total Authentication failures:       0
Total Bypassed Packets Received:     0
#sh ip wccp web-cache detail
WCCP Client information:
WCCP Client ID:          10.10.175.36
Protocol Version:        2.0
State:                   Usable
Initial Hash Info:       00000000000000000000000000000000
00000000000000000000000000000000
Assigned Hash Info:      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Hash Allotment:          256 (100.00%)
Packets s/w Redirected:  2176
Connect Time:            01:11:08
Bypassed Packets
Process:               0
Fast:                  0
CEF:                   0

How to login with SSH without enter password

How to login with SSH without enter password
[Client]
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/XXXX/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

$scp .ssh/id_rsa.pub mylogin@192.168.1.1:.ssh/authorized_keys
Password:

#Testing
$ssh mylogin@192.168.1.1

[Linux] เพิ่มความสามารถให้ squid cache video ได้

โดยปกติแล้ว squid ไม่สามารถ cache พวก youtube ได้ซึ่งถ้ามัน cache ได้ก็จะ ประหยัด bandwidth ได้มาก
Download program จาก h**p://cachevideos.com/
ผมลอง test install บน
– Ubuntu 9.04
– Squid 2.7 STABLE3
– Lighttpd
– Videocache 1.9.2

เริ่มจาก Ubuntu
$sudo apt-get install python-urlgrabber
ส่วน module ของ python-iniparse_0.3.1-1_all.deb ต้องไป download จาก h**p://code.google.com/p/iniparse/
$sudo dpkg -i python-iniparse_0.3.1-1_all.deb
ส่วนโปรแกรม videocache จาก http://cachevideos.com/download
$tar xvfz videocache-1.9.2.tar.gz
$cp videocache-1.9.2
$sudo cp -r videocache /usr/share/
$sudo cp videocache-sysconfig.conf /etc/videocache.conf
$cd /var/www
$sudo mkdir videocache
$sudo videocache/tmp videocache/youtube videocache/metacafe videocache/dailymotion videocache/google videocache/redtube videocache/xtube videocache/vimeo videocache/wrzuta videocache/youporn videocache/soapbox videocache/tube8 videocache/tvuol videocache/bliptv videocache/break
$sudo chown -R proxy:proxy videocache <-- user,group proxy เป็น user ของ process squid
$sudo mkdir /var/log/videocache
$sudo chown -R proxy:proxy /var/log/videocache
แก้ไข config ของ videocache
$sudo vi /etc/videocache.conf
cache_host = x.x.x.x <== เป็น ip ของ server
proxy = http://x.x.x.x:3128/ <== เป็น ip และ port ของ squid
base_dir = /var/www/videocache/ <== เป็นที่เก็บ cache ของ videocache ซึ่งจะต้องมีการเรียกใช้ผ่าน lighttpd ด้วยครับ
logdir = /var/log/videocache/
$sudo vi /etc/lighttpd/lighttp.conf
server.document-root = “/var/www/”
server.port = 80

$sudo vi /etc/squid/squid.conf
โดยเพิ่มที่ด้านล่างของไฟล์ ได้เลยครับ
# –BEGIN– videocache config for squid
url_rewrite_program /usr/bin/python /usr/share/videocache/videocache.py
url_rewrite_children 7
acl videocache_allow_url url_regex -i .youtube.com/get_video?
acl videocache_allow_url url_regex -i .youtube.com/videoplayback .youtube.com/videoplay .youtube.com/get_video?
acl videocache_allow_url url_regex -i .youtube.com/videoplayback .youtube.com/videoplay .youtube.com/get_video?
acl videocache_allow_url url_regex -i .youtube.[a-z][a-z]/videoplayback .youtube.[a-z][a-z]/videoplay .youtube.[a-z][a-z]/get_video?
acl videocache_allow_url url_regex -i .googlevideo.com/videoplayback .googlevideo.com/videoplay .googlevideo.com/get_video?
acl videocache_allow_url url_regex -i .google.com/videoplayback .google.com/videoplay .google.com/get_video?
acl videocache_allow_url url_regex -i .google.[a-z][a-z]/videoplayback .google.[a-z][a-z]/videoplay .google.[a-z][a-z]/get_video?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/videoplayback?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/videoplay?
acl videocache_allow_url url_regex -i (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/get_video?
acl videocache_allow_url url_regex -i proxy[a-z0-9-][a-z0-9][a-z0-9][a-z0-9]?.dailymotion.com/
acl videocache_allow_url url_regex -i vid.akm.dailymotion.com/
acl videocache_allow_url url_regex -i [a-z0-9][0-9a-z][0-9a-z]?[0-9a-z]?[0-9a-z]?.xtube.com/(.*)flv
acl videocache_allow_url url_regex -i bitcast.vimeo.com/vimeo/videos/
acl videocache_allow_url url_regex -i va.wrzuta.pl/wa[0-9][0-9][0-9][0-9]?
acl videocache_allow_url url_regex -i .files.youporn.com/(.*)/flv/
acl videocache_allow_url url_regex -i .msn.com.edgesuite.net/(.*).flv
acl videocache_allow_url url_regex -i media[a-z0-9]?[a-z0-9]?[a-z0-9]?.tube8.com/ mobile[a-z0-9]?[a-z0-9]?[a-z0-9]?.tube8.com/
acl videocache_allow_url url_regex -i .mais.uol.com.br/(.*).flv
acl videocache_allow_url url_regex -i .video[a-z0-9]?[a-z0-9]?.blip.tv/(.*).(flv|avi|mov|mp3|m4v|mp4|wmv|rm|ram)
acl videocache_allow_url url_regex -i video.break.com/(.*).(flv|mp4)
acl videocache_allow_dom dstdomain .mccont.com .metacafe.com .redtube.com .cdn.dailymotion.com
acl videocache_deny_url url_regex -i http://[a-z][a-z].youtube.com http://www.youtube.com
url_rewrite_access deny videocache_deny_url
url_rewrite_access allow videocache_allow_url
url_rewrite_access allow videocache_allow_dom
redirector_bypass on
# –END– videocache config for squid

ดูจาก forum ของ videocache.com ครับต้องแก้ code ของ videocache.py ด้วย

$sudo vi /usr/share/videocache/videocache.py

if enable_google_cache:
if (host.find(‘.youtube.com’) > -1 or host.find(‘.youtube.com’) > -1 or re.compile(‘.youtube.[a-z][a-z]’).search(host) or re.compile(‘^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$’).match(host)) and (path.find(‘videoplayback’) > -1 or path.find(‘videoplay’) > -1 or path.find(‘get_video’) > -1) and path.find(‘get_video_info’) < 0:
type = ‘YOUTUBE’
arglist = params.split(‘&’)
dict = {}
for arg in arglist:
try:
dict[arg.split(‘=’)[0]] = arg.split(‘=’)[1]
except:
continue
if dict.has_key(‘video_id’):
video_id = dict[‘video_id’]
elif dict.has_key(‘docid’):
video_id = dict[‘docid’]
elif dict.has_key(‘id’):
video_id = dict[‘id’]
else:
video_id = None
if video_id is not None:
new_url = submit_video(pid, client, type, url, video_id)
else:
log(format%(pid, client, ‘-‘, ‘URL_ERROR’, type, ‘docid not found in ‘ + new_url))

จากนั้น start process ของ squid และ lighttp
$sudo /etc/init.d/squid start
$sudo /etc/init.dlighttpd start
ดู logging จาก /var/log/squid/access.log, /var/log/videocache/videocache.log
$sudo tail -f /var/log/squid/access.log
$sudo tail -f /var/log/videocache/videocache.log

เมื่อเราเปิด video จาก youtube ดูในครั้งที่ 2 จะมีการเปิดจาก cache ครับสังเกตุง่ายๆครับว่าตรงมุมซ้ายด้านล่างของ firefox จะเห็นเป็น ip ของ server

[Linux] script สำหรับ check process แบบง่ายๆๆๆๆ

สืบเนื่องมาจากเปิด transmission-daemon ไว้แล้วมัน crash บ่อยเลยอยากให้มี script ไว้ตรวจสอบแล้ว restart อัติโนมัติ

$vi psmon.sh
#!/bin/sh
pid=`ps -ef|grep transmis|grep -v grep|awk ‘{print $2}’`
if [ -z “$pid” ]; then
echo “Process NOT running, Start process now!”
/etc/init.d/transmission-daemon restart
date >> /home/ubuntu/Ubuntu/psmon.log
else
echo “Process running”
fi
$chmod 755 psmon.sh
แล้วเรียก script ใน crontab ทุกๆ 5 นาที
$crontab -e
*/5 * * * * /home/ubuntu/Ubuntu/psmon.sh

[Linux] ใช้ wireshark บน text mode

ผมติดการใช้งาน wireshark แต่พอดีมาใช้บน linux แล้วเป็น text mode command line ใช้ tcpdump มันแสดงผลไม่สวยเห็น wireshark มีบน text เหมือนกันชื่อ tshark

install
$sudo apt-get install tshark
$sudo tshark -i eth0 -V -f “host 192.168.1.1”
ตัวอย่างมีการ capture interface eth0 โดยมี filter ที่มี src หรือ dst เป็น 192.168.1.1 แล้วแสดงผลเป็น tree คล้ายๆ GUI

[Linux] ทำ FTP caching

ต้องการทำ ftp caching ให้ install package frox
vi /etc/frox.conf
Listen 0.0.0.0
Port 2121
ResolvLoadHack wontresolve.doesntexist.abc
TcpOutgoingAddr 192.168.1.100
#^– ifconfig eth0:1 inet 192.168.1.100 netmask 255.255.255.255 up
User frox
Group frox
WorkingDir /var/spool/frox
LogLevel 20
LogFile /var/spool/frox/frox-log
PidFile /var/run/frox.pid
APConv yes
BounceDefend yes
CacheModule local
CacheSize 10240
CacheAll yes
CacheOnFQDN yes
MaxForks 10
MaxForksPerHost 10
ACL Allow * – *

[Linux] Compile cacti-spine แล้ว error

ผมใช้ ubuntu 8.10 เวลาจะ compile cacti-spine เองมัน error
ubuntu@hybitz:~/cacti-spine-0.8.7a$ ./configure
configure: error: cannot run /bin/bash config/config.sub
วิธีแก้คือ

aclocal
autoheader
libtoolize –force
automake –add-missing
autoconf
./configure
make
make install

Tunning TCP window size ของ Windows

ผมลอง FTP ระหว่าง linux กับ XP ไป Siteเดียวกัน Link เดียวกัน ปรากฏว่าผล download ของ Linux ดีกว่า เลยต้องปวดหัว ดูจาก packet ก็น่าจะเกี่ยวกับ window size เลยไปถามพี่ google พี่แกก็เลยบอกมาว่าไปดูที่ h**p://rdweb.cns.vt.edu/public/notes/win2k-tcpip.htm ซึ่งหลังจาก tunning registry แล้วก็ Ok เลย

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters]


The names/values I installed are:

GlobalMaxTcpWindowSize

REG_DWORD

131400 (decimal)

TcpWindowSize

REG_DWORD

131400 (decimal)

Tcp1323Opts

REG_DWORD

3