安裝kmod-tun for run tun0

opkg install kmod-tun

安裝coovachilli for captive portal

opkg install coova-chilli

harserl安裝 用來簡化cgi網關使用

opkg install haserl #for /etc/chilli/wwwsh

chilli重要文件

/etc/init.d/chilli

ifconfig $HS_LANIF 0.0.0.0

他會把br-lan的ip設成0.0.0.0,這行要拿掉,否則你起chilli的時候ethernet 就都不通了

/etc/chilli中

  • defaults 默認參數,若無conf則找他定義參數
  • main.conf 主配置文件,自動用定意參數產生,from ./function
  • hs.conf 認證服務配置文件,自動用定意參數產生,from ./function
  • local.conf 可以手動配置的任何其他設置
  • www 認證網站
  • wwwsh cgi網關腳本
  • up.sh 網路接口啟動腳本,run iptables
  • down.sh 網路接口關閉腳本,close iptables
  • ipup.sh ,自定義開起chilli執行的iptable
  • ipdown.sh ,自定義關閉chilli執行的iptable

chilli start

./config 讀取參數 || ./defaults 讀取參數
./function 配置參數,將參數轉換到下面三個檔案中
啟用tun0

chilli 執行順序

include main.conf
include hs.conf
include local.conf
./up.sh 啟動後,執行,chilli iptable work
./down.sh #chilli stop,執行,delete chilli iptable

chilli 幾個要點

  1. HS_LAN = wlan0,HS_WAN= < wan interface >
  2. 確定router能夠出wan, dns要通
  3. 通了以後再帶chilli
  4. 要接對 redirect 的AAA server 的網址包含chilli內部的變數都要填對才能轉向,chilli一開起就會跟AAA溝通
  5. 起chilli 以後 ifconfig 會有tun0 的介面

* 建議 先找free hotspot(AAA 管理平台,EX:http://www.worldspot.net/ ,來測試本身chiilli 是否可以通)

iptable部份

chilli 本身是靠iptables rule 來導到tun0,tun0開啟後執行在up.sh,注意iptable -I 與-A差別,順序很重要

  • if $KNAME,預設是string no,若有定義此參數可以使用coova kernel module,用HS_KNAME參數設定
coova match options :
* --name name : Name of the table to be used. 'chilli' used if none given.
* --source : Indicates the source direction (lookup by source MAC/IP)
* --dest : Indicates the reply (lookup by dest address)
$KNAME 有定義則允許FORWARD從wlan0介面進來符合定義的table通過,允許FORWARD從wlan0介面出去符合定義table的回復通過,允許進出tun0介面的FORWARD通過
    -I FORWARD -i wlan0 -m coova --name $KNAME -j ACCEPT 
    -I FORWARD -o wlan0 -m coova --name $KNAME --dest -j ACCEPT
    -I FORWARD -i tun0 -j ACCEPT
    -I FORWARD -o tun0 -j ACCEPT
  • $HS_LAYER3 = "on" 則 "$LAYER3" == "1";預設"$LAYER3" != "1",if "$LAYER3" != "1"
layer2會做的事 :
HS_UAMPORT=3990            # HotSpot UAM Port (on subscriber network)
HS_UAMUIPORT=4990          # HotSpot UAM "UI" Port (on subscriber network, for embedded portal)
HS_UAMPORT存在 :
    -I INPUT -d 10.1.0.1/32 -i tun0 -p tcp -m tcp --dport 3990 -j ACCEPT
HS_UAMUIPORT存在 : 
    -I INPUT -d 10.1.0.1/32 -i tun0 -p tcp -m tcp --dport 4990 -j ACCEPT

HS_TCP_PORT定義允許TCP port通過 :
    -I INPUT -d 10.1.0.1/32 -i tun0 -p tcp -m tcp --dport 80 -j ACCEPT

允許從tun0介面進入要到10.1.0.1/32的icmp封包通過 
    -I INPUT -d 10.1.0.1/32 -i tun0 -p icmp -j ACCEPT
DNS查詢是利用UDP 53 port,允許從tun0介面進入要到10.1.0.1/32的udp封包port53通過
    -I INPUT -d 10.1.0.1/32 -i tun0 -p udp -m udp --dport 53 -j ACCEPT

DHCP ARP protocol port 67:68,用來解析MAC地址,允許從tun0介面進入要到10.1.0.1/32的udp封包port67:68通過
    -I INPUT -d 10.1.0.1/32 -i tun0 -p udp -m udp --dport 67:68 -j ACCEPT
允許從tun0介面進入要到255.255.255.255/32的udp封包port67:68通過
    -I INPUT -d 255.255.255.255/32 -i tun0 -p udp -m udp --dport 67:68 -j ACCEPT

除了前面通過的,其餘從tun0介面進入要到10.1.0.1/32丟棄
    -A INPUT -d 10.1.0.1/32 -i tun0 -j DROP
"$ONLY8021Q" != "1",從wlan0進來的drop
    -I INPUT -i wlan0 -j DROP
  • if "$ONLY8021Q" != "1"

    -I FORWARD -i wlan0 -j DROP
    -I FORWARD -o wlan0 -j DROP
    

    -I FORWARD -i tun0 -j ACCEPT
    -I FORWARD -o tun0 -j ACCEPT

  • Help out MTU issues with PPPoE or Mesh
    為了達到最佳的傳輸效能,TCP在建立連接時會協商MSS值,取最小的MSS值為本次連接的最大MSS值,Iptables下TCPMSS模組即用来调整TCP封包中MSS数值
    --clamp-mss-to-pmtu : 根據MTU自動調整MSS

    -I FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    -I FORWARD -t mangle -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    
  • if "$HS_LAN_ACCESS" != "on" -a "$HS_LAN_ACCESS" != "allow"

    tun0到非eth0.2的FORWARD DROP
    -I FORWARD -i tun0 ! -o eth0.2 -j DROP
    

    -I FORWARD -i tun0 -o eth0.2 -j ACCEPT

  • if "$HS_LOCAL_DNS" = "on"

    若使用自定DNS,從tun0進入的udp封包port53,將目的位置改成本地位置
    -I PREROUTING -t nat -i tun0 -p udp --dport 53 -j DNAT --to-destination 10.1.0.1/32
    
  • ipup.sh存在,就去執行自定義的ipup.sh

chilli做的事

  • chilli啟動後會叫起tun0
  • iptable 將wlan0收到的轉到tun0,不在tun0上的drop
  • 允許tun0中開放的port通過,其餘drop

iptables-save

確保eth0.2出去前轉址
*nat
-A POSTROUTING -o eth0.2 -j MASQUERADE
避免封包過大,根據MTU自動調整MSS *mangle
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
*filter
-A INPUT -i wlan0 -j DROP
-A INPUT -d 10.1.0.1/32 -i tun0 -p icmp -j ACCEPT
-A INPUT -d 10.1.0.1/32 -i tun0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -d 10.1.0.1/32 -i tun0 -p udp -m udp --dport 67:68 -j ACCEPT
-A INPUT -d 255.255.255.255/32 -i tun0 -p udp -m udp --dport 67:68 -j ACCEPT -A INPUT -d 10.1.0.1/32 -i tun0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -d 10.1.0.1/32 -i tun0 -j DROP
-A FORWARD -i tun0 -o eth0.2 -j ACCEPT
-A FORWARD -i tun0 ! -o eth0.2 -j DROP
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -o tun0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -o wlan0 -j DROP
-A FORWARD -i wlan0 -j DROP

chilli stop 執行down.sh

down.sh執行/var/run/chilli.tun0.sh,此檔案在up.sh裡面每新增一筆iptable規則,就在/var/run/chilli.tun0.sh寫入刪除該筆iptable規則,執行完/var/run/chilli.tun0.sh刪除該檔案,並去執行ipdown.sh(如果有存在)

Debug

chilli --fg --debug

results matching ""

    No results matching ""