用 iptables 手動做 3G 版本的 IP 分享器
環境配置與需求
查詢設定的指令
延伸應用
由於每次 wvdial 撥接產生出來的對外 IP 不盡相同,所以前述指令就會要做些微調整,此 script 則會動態找尋目前的 3G 對外 IP 為何自動修正,如果把此指令加註在開機執行的 loop 內,即可達成開機後,自動成為 3G IP 分享器喔。
以下是分享動態產生的 script
經過強者同事醍醐灌頂後,我們改為更便捷的方式,採用以下一行script就搞定
顯示目前防火牆規則
[1.] CentOS 做 NAT
[2.] CentOS 6.2 架設 NAT
[3.] How to Find out the IP address assigned to eth0 and display IP only
- 本文於作業系統 CentOS 5.8 底下驗證
- 具備 3G Modem 以及 SIM 卡 (這是一定要的咩)
- 3G 撥號軟體 wvdial
- Linux 封包過濾軟體 iptables
以下將針對關鍵的軟體部分做說明以及分享:
3G 撥號軟體 wvdial
首先要能確保您的電腦能夠順利撥接,而在 Linux 底下有一套 wvdial 似乎蠻受推崇的,安裝方式以及設定都算簡單。
安裝 wvdial
yum install wvdial
我的 /etc/wvdial.conf 設定檔
[Dialer Defaults] Enable = yes Modem = /dev/ttyACM0 Baud = 460800 Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 ISDN = 0 Modem Type = USB Modem Phone = *99# Username = none Password = none
Linux 封包過濾軟體 iptables
使用 iptables 做 NAT 後,讓內網的電腦設備都透過前步驟的 3G 網卡出去,即可達到製作 3G 版的 IP 分享器之需求。
修改 /etc/sysctl.conf
設定 iptables 做 SNAT
使用 iptables 做 NAT 後,讓內網的電腦設備都透過前步驟的 3G 網卡出去,即可達到製作 3G 版的 IP 分享器之需求。
修改 /etc/sysctl.conf
net.ipv4.ip_forward = 1 // 原本為 0
設定 iptables 做 SNAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j SNAT --to :111.80.88.126
- -t nat (nat table)
- -A (append)
- POSTROUTING (post routing在路由之後進行)
- ppp0 (設備上的3G網卡裝置名稱)
- -o (output)
- -s (source)
- 192.168.182.0/24 (內網IP,其中 /24 可省略或做其他調整)
- -j (jump)
- SNAT (source NAT)
- --to (後面接對外IP)
查詢設定的指令
iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.0.0/24 anywhere to:111.80.88.126 Chain OUTPUT (policy ACCEPT) target prot opt source destination
延伸應用
由於每次 wvdial 撥接產生出來的對外 IP 不盡相同,所以前述指令就會要做些微調整,此 script 則會動態找尋目前的 3G 對外 IP 為何自動修正,如果把此指令加註在開機執行的 loop 內,即可達成開機後,自動成為 3G IP 分享器喔。
以下是分享動態產生的 script
IFACE=ppp0 FORWARD_IP_ADDR=192.168.0.0/24 IP_ADDR=`ifconfig ${IFACE} | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` iptables -P INPUT ACCEPT iptables -F iptables -t nat -A POSTROUTING -s ${FORWARD_IP_ADDR} -o ${IFACE} -j SNAT --to ${IP_ADDR}
經過強者同事醍醐灌頂後,我們改為更便捷的方式,採用以下一行script就搞定
iptables -t nat -A POSTROUTING -j MASQUERADE話說 iptables 還是有點博大精深,再來慢慢地要完整的理解整個流程才是。
補充指令
顯示目前防火牆規則
iptables-save儲存防火牆規則
/etc/init.d/iptables save
參考資料
[1.] CentOS 做 NAT
[2.] CentOS 6.2 架設 NAT
[3.] How to Find out the IP address assigned to eth0 and display IP only
Comments
Post a Comment