คนเรามันไม่รู้จักพอ
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 มาเรียบร้อย ติดตั้งเรียบร้อย โดยลงแต่ OpenSSH เพื่อควบคุมระยะไกล (แต่ยังไม่เคยลองใช้เลย ไปจิ้มที่เครื่องตลอด) และไม่ได้ติดตั้ง 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."
Add new comment