端午假期搞了一塊帶有wifi模組的開發板,本來這是用於研發android終端的,我本無意於此,因此就拿來做迷你路由器了,當然,我事先知道它肯定可以很方便的灌入linux核心以及應用程式,否則光這一步就夠我喝一壺的了。
所謂的乙個路由器,使用linux來做實在太方便了,對照著家裡的tp-link,無非就是實現以下的模組,甚至都不用寫一行c**:
1.實現路由新增,修改,刪除操作介面
介面可以使用php來做,當然也可以使用字元介面,不過這樣做看起來沒有php做出來的專業。底層建議使用iproute2工具集而不是route命令,因為iproute2可以很方便的配置複雜的路由策略,比如策略路由,force-onlink路由等。 www.2cto.com
2.防火牆模組
底層使用iptables命令設定filter表,然後用php做乙個前端介面。
3.位址轉換模組
底層使用iptables命令設定nat表,然後用php做乙個前端介面。這乙個模組完全是仿效一般的家用路由器來的,這種路由器一般用於乙個家庭多台機器的上網,因此有必要將內網位址masquerade到唯一的公網位址。當然如果你本身就有很多公網ip且無意隱藏你的內部網路,那真的就不需要這個了。
4.流控模組
底層使用iptables命令以及tc命令,基於ip位址,五元組,mac資訊等進行流控,用php做乙個前端配置介面。
5.nat穿越模組
這個模組不得不多說一些,畢竟對於我等喜歡用bt,電驢的那是沒有它不行的啊。說實話,我還真想將基於hack技術的nat穿越技術用到自製的路由器上,後來發現這太難了,還不能保證每次都能成功,其實一直以來我就對這種點子不是很感冒,因此就想其他的辦法。穿越nat其實是可以用另一種技術來替代的,那就是設定乙個dnat,畢竟路由器都是我自己的,我想怎麼搞就怎麼搞,設定乙個dnat是容易的,但是問題是我到底需要將內網的哪些位址和埠開放呢?如果全部開放,那還不如當初不設定snat呢,然而不設定snat又涉及到共享公網ip的問題... www.2cto.com
於是,想了好久終於想出乙個看起來還不錯的主義,那就是讓內網主機主動通報自己的ip和需要對映的埠,路由器上始終執行乙個接收程序即可,接收到某一主機的通報後,就將以下規則設定到路由器上:
iptables -t nat -a prerouting -i 外網口 -d 唯一的公網位址 -p 需要對映的協議 --dport 需要對映的埠 -j dnat --to-destination 通報上來的內網位址
於是,這就需要在每乙個主機上放置乙個用於通報的程式。想了一下,這樣還是很麻煩,還不如將工作留給路由器呢,也就是說由路由器主動詢問內部網,看誰有需要對映的埠,這樣也不行,因為這樣需要內網主機的回答,還需要程式設計。於是索性使用nmap每隔一段時間掃一下內網的熟知的p2p埠,然後將「發現」的埠動態設定在路由器上...花了一下午之間,終於可行了,後來問題又來了,問題在於何時刪除這些對映...維持乙個狀態機太複雜了,於是我就坐到此為止了,反正能用即可。
為何花了一下午呢?原來犯了乙個低階錯誤,我在vmware裡面試驗nmap掃瞄,發現得到的結果os都是macos,問題恰恰就在這,因為我用於試驗的機器執行的還真都是macos...最終發現所有的結果os都是我的那個vmware的宿主機,因為我的vmware中的linux的網絡卡模式是nat,而vmware的nat是由宿主機在使用者態完成的,它實則就是乙個**,因此nmap的結果表現不出目標機的真實資訊。
後來仔細研究了一下家裡的tp-link路由器,發現了乙個叫做upnp的協議,噢,原來這個協議就是實現我那個功能的啊,太孤陋寡聞了...還好意思說自己網路技術很厲害,慚愧啊。於是直接搞upnp,頓時完美了。 www.2cto.com
6.ip/mac繫結模組
同樣用iptables,沒別的比這更方便。
7.ipsec穿越模組
我基本不使用ipsec,因此忽略。
8.日誌模組
很重要,雖然我一直都不知道為何日誌很重要...
9.ssh開放
最後,我沒有忘記給自己開放乙個ssh,否則除錯就麻煩了。
作者 dog250
自製迷你路由器過程中的點滴
端午假期搞了一塊帶有wifi模組的開發板,本來這是用於研發android終端的,我本無意於此,因此就拿來做迷你路由器了,當然,我事先知道它肯定可以很方便的灌入linux核心以及應用程式,否則光這一步就夠我喝一壺的了。所謂的乙個路由器,使用linux來做實在太方便了,對照著家裡的tp link,無非就...
考研過程中的點滴
大三下學習就準備開始考研,談起考研,大學開始從來就沒有想過,只是自己不斷的學習當中,覺得學習越來越重要,所以想考到外省多接觸更多人,也給自己乙個更多的選擇的機會。大三上學期自己一直在自學安卓,一直到現在偶爾看下安卓,自己覺得自己去做個安卓開發應該是沒有什麼問題了,也覺得自己自學能力特別強吧,但是最近...
使用自製GHOST過程中的遇到的問題
由於我經常要替客人安裝2003系統。為了方便,我可不想每替乙個客人安裝2003,都重複那些很煩很長的安裝和設定。於是我就想到製作ghost。雖然我參考了網上製作萬能ghost的文章,但我的那個情況的確很奇怪,就是一改變電源模式,一重啟就說丟失檔案,試過很多次都是這樣。算了,我就不改變電源模式,我大不...