我不宅,我只是不出門

Murmur of a technical dude

FON AP: Always Turn On SSH

with 6 comments

在 /www/cgi-bin/webif/upgrade.sh 中,有這樣的步驟,會把原先設定的一些資料保存下來,不會因為 FON AP 使用 web 管理界面的 upgrade 把整個 NVRAM 給 flash 掉而消失。而設定要怎麼保存?

tar czf /tmp/config.tar.gz /etc/config/
mtd write /tmp/config.tar.gz config > /dev/null

簡單的說就是把 /etc/config 整個 tar 起來後,透過 mtd 把設定寫入,之後 upgrade 完成後,應該也是照反向方法把設定取回。所以先前設定的像是 public/private SSID、WPA 密碼、network 設定等等,都會保存著。所以我想透過 /etc/config 裡面的修改,嘗試看看讓原本修改 /etc/init.d/dropbear 和 /etc/firewall.user 的方式,變成不需要更動,而依然可以保有 SSH login 功能。原理在於 /etc/config/openports 這個 script,是提供 port forwarding 的設定,以下是我嘗試的修改:

#!/bin/sh
. /etc/functions.sh
iptables -t nat -A prerouting_rule -i $1 -p tcp –dport 22 -j ACCEPT
iptables -A input_rule -i $1 -p tcp –dport 22 -j ACCEPT
[ ! -f /var/run/dropbear.pid ] && /usr/sbin/dropbear
# 在 web 上設定的 port forwarding 會被 append 在後面
open_port $1 22 192.168.10.10 22 udp
open_port $1 22 192.168.10.10 22 tcp

/etc/config/openports 是在啟動時候,由 /etc/init.d/S45firewall 所執行,啟動的命令列大概是 /etc/config/openports eth0。所以 iptables 會把 eth0 的 port 22 打開,同時如果發現 /var/run/dropbear.pid 不存在,則去執行 dropbear 來啟動 SSH daemon。

註:單純理論上測試,還沒真正完全 upgrade 0.7.1r2 ROM image 試驗過。
Update: 2007/01/24
註2: 謝謝 WayneSan 的測試,但是 iptables 那部份應該不用更動,因為前面的範例就是從 web 上加入 port forwarding 的結果,同時 web 上也只有看到後面的 open_port 所使用的 port & IP。所以不互相影響。

Written by jclin

2007/01/23 於 12:52 上午

張貼於FON, hardware

6 回應

Subscribe to comments with RSS.

  1. 剛剛照您的方法改了…成功!!!
    然後讓他自動更新7.1.2…成功!!!!

    不過iptables的部分我改成了…
    iptables -I INPUT 1 -p tcp –dport 22 -j ACCEPT
    以免當正常從Web管理設定Port Forwarding時可能會有Error~~~:p

    WayneSan

    2007/01/24 at 5:23 下午

  2. 正確的說是刪除的時候頁面會有問題~~@@"
    我的是這樣啦….^^"a
    應該是因為刪除的時候$1傳入的不是 eth0 ~~@@

    WayneSan

    2007/01/26 at 11:51 下午

  3. $1 是指 shell(/etc/init.d/S45firewall) 執行該 script (openports) 的參數。而 web 管理界面是用額外的程式(shell script、awk) 來修改該 script 檔案內容,並非去執行它。修改的程式會去過濾 open_port 和相關參數位置。剛試過是不會有不正常或有問題。我想應該無關 $1 是否為 eth0 的問題。

    jclin

    2007/01/27 at 1:11 上午

  4. Hi~
    我發現 web 管理界面刪除的時候除了修改openports之外
    還會去執行它
    我也遇到了error

    Try ‘iptables -h’ or balabala…..

    sclin

    2007/01/27 at 1:32 上午

  5. sorry, 我所說的執行是指“非透過執行openports這個script來修改自己",而是透過 /www/cgi-bin/adv-pf.sh 來修改,當然它會再透過執行 /etc/init.d/S45firewall 來重新執行一次 openports。
    事實上我也有自己嘗試過新增及刪除,自己都是沒有問題或錯誤出現啦。因為看 adv-pf.sh 也是針對 open_port 那些 command 來作列出刪除或修改。但是實際上我也沒有仔細看,並且我是透過 thinclient 升級為 0.7.1r2 而非透過 flash firmware 方式。

    jclin

    2007/01/27 at 1:06 下午

  6. I’m new here … This unfortunately did not work, gave error in the line: iptables -A input_rule -i $1 -p tcp –dport 22 -j ACCEPT

    OiYes

    2009/01/11 at 2:03 上午


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: