核心有很多參數可以調節﹐以適用於不同的狀況。通常﹐ 99% 的安裝﹐使用預設參數就可以了﹐不過﹐與其這樣的話﹐此稱為 Advanced 的 HOWTO 就浪得虛名了﹗
有空請看看 /proc/sys/net﹐或有意外收穫哦。只是﹐剛開始的時候﹐並非所有東西都會寫在這裡﹐我們盡力而為就是了。
預設情況下﹐router 會路由所有東西﹐就算該封包‘顯然’不屬於貴網路的。常見的例子﹐莫過於將私有 IP 泄漏到 internet 上去。假如您有一個界面﹐其上設定的路由為 195.96.96.0/24﹐那您不會預期來自 212.64.94.1 的封包會到達這裡。
許多人都想關閉此一功能﹐因此核心設計者也打開了方便之門。在 /proc 裡面有些檔案﹐透過它們您可以讓核心為您做到這點。此方法被稱為 "逆向路徑過濾(Reverse Path Filtering)"。基本上﹐假如對此封包作出的回應﹐不是循其進入的界面送出去﹐那它就被視之為一個 bogus 封包﹐而被置之不理。
# for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
{ echo 2 > $i
} done
我們用上面的例子來看看﹐如果一個封包從 eth1 到達 Linux router﹐自稱來自 Office+ISP 這個 subnet﹐那它就會被丟棄。同樣地﹐如果封包來自 Office 這個 subnet﹐卻自稱來自防火牆外部﹐那它也同樣會被丟棄。
上面是完全(full) 逆向路徑過濾。預設是只根據直接相連網路的 IP 進行過濾﹐這時因為完全過濾會打斷所謂的非對稱路(asymmetric routing)情形 (也就是﹐封包從一端進入﹐而從另一端出去﹐例如衛星流量傳送﹐或是您的網路使用動態 (bgp、ospf、rip)路由。資料從衛星接受碟下傳進來﹐而回應則從正常的專線送回去)。
假如您屬於這種例外(您應該心中有數)﹐那您可以簡單的在衛星數據進入的界面上關閉 rp_filter。如果您想要看看封包是否真的會被丟棄﹐那可以透過同一目錄的 log_martians 檔案﹐告訴核心將之記錄到 syslog 上面去。
# echo 1 >/proc/sys/net/ipv4/conf/<interfacename>/log_martians
FIXME: 不清楚設定 conf/{default,all}/* 下面的檔案是否足夠﹖ --- martijn
嗯﹐太多參數其實都可以修改啦。我們會試著將它們儘數羅列出來﹐而且(部份)會寫在Documentation/ip-sysctl.txt 中。
其中有些設定的預設值會有不同﹐看您在編譯核心的時候﹐是否以 'Yes' 來回答 'Configure as router and not host' 囉。
請留意﹐大多數的速率(rate)限制功能都不適用於 loopback 之上﹐所以請勿在本機上進行測試。這個限制受制於所謂的 'jiffies' ﹐且它們硬性的只能使用前述的 token bucket filter。
核心有一個內部時鐘﹐每秒跑 'HZ' 跳(或曰 'jiffies' )。在 intel 上面﹐'HZ' 大概為 100 (譯者註﹕我猜這裡指所謂的 '內頻' 而言吧﹖新的主機板大都支援 133 這個速度)。比方說﹐設定一個 *_rate 檔案為 50 好了﹐則可每秒處理 2 個封包。而 token bucket filter 也可以被設定為﹐如果有足夠的 tokens 存儲的話﹐能讓每一個 burst (瞬增流量)可達 6 個封包。
如果核心認為它不能傳送某一封包﹐則將之丟棄﹐同時向封包來源送出一個 ICMP 告知其結果。
對所有封包均不作出 echo 。請勿將預設值設為啟動﹐除非您被利用為一個 DoS 工具的跳站﹐那或許有用。
如果您 ping 網路的廣播位址﹐那所有主機都會做出回應﹐這將是一個非常便利的 dinal-of-servie 工具。將這裡設定為 1 則會忽略這些廣播訊息。
送出 echo 回應至任意目的端之速率
FIXME: 有待補充
FIXME: 有待補充
這可以成為導致 traceroute 出現 '星星(* * *)' 的主因。這裡限制送出 ICMP Time Exceeded 訊息的數目。
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
封包的存活期 (TTL)。設為 64 應是安全的。如果您的網路超大的﹐那就提昇此值。千萬不要隨便亂玩 --- 如遇到路由迴圈(routing loop)將導致更嚴重的災難。在某些情形之下﹐ 您甚至會降低此值。
假如您要用動態界面位址做 dial-on-deman ﹐那就設定它。一旦您的請求界面起來之後﹐所有看不到回應的本地 TCP socket 都會重新捆綁(rebound)﹐以獲得正確的位址。假如遇到啟動界面的連線自己不工作﹐但再試一次卻又可以的情形﹐設定這個可解決這個問題。
是否要核心轉送封包。預設是關閉的。
對外連線時所使用的本地埠口範圍。預設值事實上蠻小的﹕1024 到 4999。
如果您要關閉 Path MTU discovery --- 一種在路徑上判定可接受的最大 Maximum Transfer Unit 數值的技術﹐那就設定這裡。
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
使用 Selective ACK﹐它可以用來找出特定的遺失封包 --- 因而有助於迅速復原。
FIXME: 有待補充
對於一個新建連線﹐核心要送多少個 SYN 封包數才決定放棄。
為了與另一端建立連線﹐核心會連同 SYN 一起送出 ACK ﹐以確認收到上一個 SYN。這是所謂的三段交握( threeway handshake) 的第二個步驟。這裡決定核心在放棄連線之前所送出的 SYN+ACK 數目。
Timestamps 用在其它一些東西中﹐可以防範那些偽造的 sequence 號碼。一條 1 gigabit 的線路或許會重遇到帶 out-of-line 數值的舊 sequence 號碼(假如它是由於上次產生的)。Timestamp 會讓它知道這是個 '舊封包'。
FIXME:﹕有待補充
正常來說﹐TCP/IP 可以接受大至 65535 byte 的 windows。對於高速網路﹐這或許還是不夠的。這個 windows scaling 選項則允許接近 bibabyte 的 windows﹐這將有助改善那些高頻寬延遲產品。
DEV 可以只代表一個真實界面﹐也可以是 '全部' 或 '預設值'。而預設值也或許會改變建立的界面設定。
如果 router 認為您在不適當的使用它(如﹐需要在同一界面上重送封包)﹐那它就會送出一個 ICMP Redirect。這或許會造成輕度的安全風險﹐所以您最好關閉它﹐或是使用 secure redirects。
此功能並不常用。過去﹐您可以給出一個 IP 位址列表﹐讓它提供此功能。Linux 也可以實踐這個 IP 選項。
FIXME: 有待補充
FIXME: 有待補充
請參考逆向路徑過濾章節。
是否在該界面上進行 multicast 轉送。
如果設為 1﹐那麼所有其它界面都會回應以此界面為目的之 arp 請求。當架設 'ip pseudo bridges' 時相當有用。啟用此功能之前﹐請確定您的 netmasks 要非常正確。
請參考逆向路徑過濾章節。
FIXME: 有待補充
是否要送出前面提到的 redirects。
FIXME: 有待補充
FIXME: 有待補充
DEV 可以只代表一個真實界面﹐也可以是 '全部' 或 '預設值'。而預設值也或許會改變建立的界面設定。
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充
FIXME: 有待補充