CAT CDMA and Ubuntu Server with Squid and Frox

คนเรามันไม่รู้จักพอ

previous blog: CAT CDMA 3G on Windows and Ubuntu

ในครั้งแรก ใช้ Windows XP เป็นเซิฟเวอร์ ก็ง่าย ๆ แจกได้ ลง squid เรียกร้อย แต่มันทำ transparent proxy ไม่ได้ พยายามหาโปรแกรมจัดการ route แต่ก็ไม่เจอโปรแกรมฟรี เลยปล่อยมันไปอย่างนั้น ใช้เน็ตก็ผ่าน Squid Proxy ไป

เล่นเกมก็ผ่านไปทางปกติ ไม่มีปัญหาอะไร (ที่ทำแบบนี้เพราะ ข้อมูลเขาบอกว่าได้ความเร็วไม่เกิน 500kbps บนลินุกซ์นั่นแหละ)

แต่เมื่อลองทดสอบเองแล้ว มันได้เกิน 500kbps จึงต้องเปลี่ยน Server อีกครั้ง เปลี่ยนมาใช้ Ubuntu นั่นเอง

จัดการดาวโหลด Ubuntu Sever 9.10 มาเรียบร้อย ติดตั้งเรียบร้อย โดยลงแต่ OpenSHH เพื่อควบคุมระยะไกล (แต่ยังไม่เคยลองใช้เลย ไปจิ้มที่เครื่องตลอด) และไม่ได้ติดตั้ง GNOME ต้องการจะใช้ command-line เท่านั้น

ทำเสร็จปุ๊บ ครั้งแรกก็เจอปัญหา...

ใช่แล้ว จะหมุน 3G MODEM ยังไง?

ครั้งก่อนใช้ผ่าน GUI ของ Network Manger แต่ครั้งนี้ไม่มีให้ใช้แล้ว

จนทุดท้ายได้เจอบล็อก: ถอยมาแล้ว Novatel Ovation MC760 เลยหา wvdial มาลอง

แต่ Ubuntu มันไม่ได้ลง wvdial มาให้หน่ะสิ สุดท้ายเลยต้องให้เครื่องที่ใช้ประจำแชร์เน็ตไปให้เครื่องเซิฟเวอร์ เพื่อจะลง wvdial

(ที่จริงคาดว่าคงจะมีวิธีอื่น แต่ก็ไม่ได้หาต้องรีบทำให้เสร็จ)

เมื่อลงเสร็จก็แก้ไขไฟล์ /etc/wvdial.conf เป็นแบบนี้

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
Phone = #777
ISDN = 0
Modem = /dev/ttyUSB0
Baud = 9600
 
 
Username = evdo@catevdo.com
Password = cdmacat
 
 
Stupid Mode = 1
New PPPD = yes
 
 
[novatel]
Modem = /dev/ttyUSB0
Baud = 115200
SetVolume = 0
Dial Command = ATDT
Init1 = ATZ
Init3 = ATM0
FlowControl = CRTSCTS
 
 
[Dialer cdma]
Username = evdo@catevdo.com
Password = cdmacat
Phone = #777
Stupid Mode = 1
Init1 = ATZ
Inherits = novatel

ทดลองต่อโมเด็มโดยใช้คำสั่ง sudo wvdial cdma ก็หมุนได้เรียบร้อยดี

หลังจากนั้นก็ทำเครื่องนี้ให้เป็น Gateway (Sharing Internet Connection in Ubuntu)

ppp0 = the network adapter with internet (via wvdial - usb modem)
eth0 = the network adapter for LAN connection

เริ่มต้นด้วย เปลี่ยนไอพีให้เป็นแบบ static

sudo ifconfig eth0 192.168.0.1

ใช้ iptables เพื่อเปิด NAT translation เพื่อให้ packetes ผ่านเซิฟเวอร์

# allows forwarded packets
sudo iptables -A FORWARD -i ppp0 -o eth0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
 
# allow forwarding of established or related packets
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 
# does the NAT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE

เปิดการ Forward ไอพี โดยการ

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

แก้ไขไฟล์ /etc/sysctl.conf โดยเพิ่มข้อมูลด้านล่างเข้าไป

net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.all.forwarding = 1

เมื่อแชร์เน็ตได้แล้วก็ติดตั้ง squid เพิ่มเข้ามาก่อน เพื่อจะเป็น cache proxy

และแก้ไขไฟล์ squid นิดหน่อยที่จำเป็น

# create acl rule
acl localnet src 192.168.0.0/24
 
# allow localnet pass
http_access allow localnet
 
# set port to 8080 and transparent for transparent proxy
http_port 8080 transparent
 
# change RAM cache size (normally use amount of RAM divide by 3 (RAM/3))
cache_mem 256 MB
 
# size of file to cache in RAM
maximum_object_size_in_memory 1024 KB
 
# disk cache directory (I used 10GB)
# I don't know how much size for suitable in my cafe'
cache_dir ufs /var/spool/squid 10240 16 256
 
# maximum size of file want to cache
maximum_object_size 30720 KB

มันยังต้องปรับแต่งมากกว่า หากต้องการความสามารถที่ดีกว่า แต่ผมขอทำแค่นี้ไว้ก่อน

ต่อมาก็ติดตั้ง frox เข้ามา และแก้ไข /etc/frox.conf เป็นดังนี้

#uncomment below line (change port to squid port if necessary)
HTTPProxy 127.0.0.1:8080
 
#uncomment below line
ForceHTTP yes
CacheModule HTTP
 
#comment below line (for disable local cache and use squid cache instead)
#CacheModule local
#CacheSize 4000

เพิ่มการ redirect port เพื่อให้เข้ามายัง squid และ frox

# redirect http port (80,88,9898) from eth0 to port 8080 (squid proxy port)
sudo iptables -A PREROUTING -m multiport -t nat -i eth0 -p tcp --dport 80,88,9898 -j REDIRECT --to-port 8080
 
# redirect ftp port (21,6001,8021) from eth0 to port 2121 (frox port)
sudo iptables -A PREROUTING -m multiport -t nat -i eth0 -p tcp --dport 21,6001,8021 -j REDIRECT --to-port 2121

เสร็จแล้วก็

# stop squid
sudo service squid stop
 
# recreate squid cache
sudo squid -z
 
# start squid
sudo service squid start
 
# stop frox
sudo service frox stop
 
#start frox
sudo service frox start

แต่ว่า ปัญหามันมีอยู่ว่า iptables มันไม่จำ rules เซ็ตไว้ (ตอน restart ยังอยู่ แต่พอปิดมันลืม???) ก็เลยต้อง restore มันกลับไป (Restoring iptables at boot)

อย่างแรก เมื่อเพิ่ม rules เข้าไปก่อน ทดลอง ทดสอบว่าใช้ได้ก็จัดการ สำรองเอาไว้

#save iptables's rules to home directory
sudo iptables-save > /home/[username]/iptables.rules
 
#copy its to /etc
sudo cp /home/[username]/iptables.rules /etc/iptables.rules

แก้ไขไฟล์ /etc/network/interfaces โดยเพิ่มบรรทัดล่างนี้เข้าไปในส่วนของ eth0

pre-up iptables-restore < /etc/iptables.rules

จะได้

auto eth0
iface eth0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    network 192.168.0.0
    pre-up iptables-restore < /etc/iptables.rules

เป็นอันเรียบร้อยสำหรับการติดตั้งเซิฟเวอร์ Ubuntu สำหรับร้านเน็ตง่าย ๆ

แต่ก็ต้องจำไว้ว่า ยังมีตัวอื่นที่อำนวยความสะดวกมากกว่า Ubuntu Server อย่าง IPCop หรือ ClarkConnect และตัวอื่น ๆ

และยังต้องปรับแต่งอีกมาก อย่างเช่นการเก็บแพทช์เกม รวมทั้งให้ต่อ CAT CDMA สองตัวพร้อมกัน และยังมีเรื่องอื่น ๆ อีก ที่ต้องปรับปรุง

ไว้วันหลังจะมาเขียนเพิ่มอีก


แถม script สำหรับล้าง iptables rule จาก cyberciti.biz

#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo "Done."

Comments

Post new comment

The content of this field is kept private and will not be shown publicly.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • You can use Markdown syntax to format and style the text. Also see Markdown Extra for tables, footnotes, and more.

More information about formatting options