Next Previous Contents

12. 核心網路參數 (Kernel network parameters)

核心有很多參數可以調節﹐以適用於不同的狀況。通常﹐ 99% 的安裝﹐使用預設參數就可以了﹐不過﹐與其這樣的話﹐此稱為 Advanced 的 HOWTO 就浪得虛名了﹗

有空請看看 /proc/sys/net﹐或有意外收穫哦。只是﹐剛開始的時候﹐並非所有東西都會寫在這裡﹐我們盡力而為就是了。

12.1 逆向路徑過濾 (Reverse Path Filtering)

預設情況下﹐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

12.2 尚不明確的設定 (Obscure settings)

嗯﹐太多參數其實都可以修改啦。我們會試著將它們儘數羅列出來﹐而且(部份)會寫在Documentation/ip-sysctl.txt 中。

其中有些設定的預設值會有不同﹐看您在編譯核心的時候﹐是否以 'Yes' 來回答 'Configure as router and not host' 囉。

一般的 ipv4 (Generic ipv4)

請留意﹐大多數的速率(rate)限制功能都不適用於 loopback 之上﹐所以請勿在本機上進行測試。這個限制受制於所謂的 'jiffies' ﹐且它們硬性的只能使用前述的 token bucket filter。

核心有一個內部時鐘﹐每秒跑 'HZ' 跳(或曰 'jiffies' )。在 intel 上面﹐'HZ' 大概為 100 (譯者註﹕我猜這裡指所謂的 '內頻' 而言吧﹖新的主機板大都支援 133 這個速度)。比方說﹐設定一個 *_rate 檔案為 50 好了﹐則可每秒處理 2 個封包。而 token bucket filter 也可以被設定為﹐如果有足夠的 tokens 存儲的話﹐能讓每一個 burst (瞬增流量)可達 6 個封包。

/proc/sys/net/ipv4/icmp_destunreach_rate

如果核心認為它不能傳送某一封包﹐則將之丟棄﹐同時向封包來源送出一個 ICMP 告知其結果。

/proc/sys/net/ipv4/icmp_echo_ignore_all

對所有封包均不作出 echo 。請勿將預設值設為啟動﹐除非您被利用為一個 DoS 工具的跳站﹐那或許有用。

/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts [Useful]

如果您 ping 網路的廣播位址﹐那所有主機都會做出回應﹐這將是一個非常便利的 dinal-of-servie 工具。將這裡設定為 1 則會忽略這些廣播訊息。

/proc/sys/net/ipv4/icmp_echoreply_rate

送出 echo 回應至任意目的端之速率

/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

FIXME: 有待補充

/proc/sys/net/ipv4/icmp_paramprob_rate

FIXME: 有待補充

/proc/sys/net/ipv4/icmp_timeexceed_rate

這可以成為導致 traceroute 出現 '星星(* * *)' 的主因。這裡限制送出 ICMP Time Exceeded 訊息的數目。

/proc/sys/net/ipv4/igmp_max_memberships

FIXME: 有待補充

/proc/sys/net/ipv4/inet_peer_gc_maxtime

FIXME: 有待補充

/proc/sys/net/ipv4/inet_peer_gc_mintime

FIXME: 有待補充

/proc/sys/net/ipv4/inet_peer_maxttl

FIXME: 有待補充

/proc/sys/net/ipv4/inet_peer_minttl

FIXME: 有待補充

/proc/sys/net/ipv4/inet_peer_threshold

FIXME: 有待補充

/proc/sys/net/ipv4/ip_autoconfig

FIXME: 有待補充

/proc/sys/net/ipv4/ip_default_ttl

封包的存活期 (TTL)。設為 64 應是安全的。如果您的網路超大的﹐那就提昇此值。千萬不要隨便亂玩 --- 如遇到路由迴圈(routing loop)將導致更嚴重的災難。在某些情形之下﹐ 您甚至會降低此值。

/proc/sys/net/ipv4/ip_dynaddr

假如您要用動態界面位址做 dial-on-deman ﹐那就設定它。一旦您的請求界面起來之後﹐所有看不到回應的本地 TCP socket 都會重新捆綁(rebound)﹐以獲得正確的位址。假如遇到啟動界面的連線自己不工作﹐但再試一次卻又可以的情形﹐設定這個可解決這個問題。

/proc/sys/net/ipv4/ip_forward

是否要核心轉送封包。預設是關閉的。

/proc/sys/net/ipv4/ip_local_port_range

對外連線時所使用的本地埠口範圍。預設值事實上蠻小的﹕1024 到 4999。

/proc/sys/net/ipv4/ip_no_pmtu_disc

如果您要關閉 Path MTU discovery --- 一種在路徑上判定可接受的最大 Maximum Transfer Unit 數值的技術﹐那就設定這裡。

/proc/sys/net/ipv4/ipfrag_high_thresh

FIXME: 有待補充

/proc/sys/net/ipv4/ipfrag_low_thresh

FIXME: 有待補充

/proc/sys/net/ipv4/ipfrag_time

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_abort_on_overflow

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_fin_timeout

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_keepalive_intvl

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_keepalive_probes

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_keepalive_time

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_max_orphans

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_max_syn_backlog

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_max_tw_buckets

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_orphan_retries

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_retrans_collapse

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_retries1

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_retries2

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_rfc1337

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_sack

使用 Selective ACK﹐它可以用來找出特定的遺失封包 --- 因而有助於迅速復原。

/proc/sys/net/ipv4/tcp_stdurg

FIXME: 有待補充

/proc/sys/net/ipv4/tcp_syn_retries

對於一個新建連線﹐核心要送多少個 SYN 封包數才決定放棄。

/proc/sys/net/ipv4/tcp_synack_retries

為了與另一端建立連線﹐核心會連同 SYN 一起送出 ACK ﹐以確認收到上一個 SYN。這是所謂的三段交握( threeway handshake) 的第二個步驟。這裡決定核心在放棄連線之前所送出的 SYN+ACK 數目。

/proc/sys/net/ipv4/tcp_timestamps

Timestamps 用在其它一些東西中﹐可以防範那些偽造的 sequence 號碼。一條 1 gigabit 的線路或許會重遇到帶 out-of-line 數值的舊 sequence 號碼(假如它是由於上次產生的)。Timestamp 會讓它知道這是個 '舊封包'。

/proc/sys/net/ipv4/tcp_tw_recycle

FIXME:﹕有待補充

/proc/sys/net/ipv4/tcp_window_scaling

正常來說﹐TCP/IP 可以接受大至 65535 byte 的 windows。對於高速網路﹐這或許還是不夠的。這個 windows scaling 選項則允許接近 bibabyte 的 windows﹐這將有助改善那些高頻寬延遲產品。

逐個設備設定 (Per device settings)

DEV 可以只代表一個真實界面﹐也可以是 '全部' 或 '預設值'。而預設值也或許會改變建立的界面設定。

/proc/sys/net/ipv4/conf/DEV/accept_redirects

如果 router 認為您在不適當的使用它(如﹐需要在同一界面上重送封包)﹐那它就會送出一個 ICMP Redirect。這或許會造成輕度的安全風險﹐所以您最好關閉它﹐或是使用 secure redirects。

/proc/sys/net/ipv4/conf/DEV/accept_source_route

此功能並不常用。過去﹐您可以給出一個 IP 位址列表﹐讓它提供此功能。Linux 也可以實踐這個 IP 選項。

/proc/sys/net/ipv4/conf/DEV/bootp_relay

FIXME: 有待補充

/proc/sys/net/ipv4/conf/DEV/forwarding

FIXME: 有待補充

/proc/sys/net/ipv4/conf/DEV/log_martians

請參考逆向路徑過濾章節。

/proc/sys/net/ipv4/conf/DEV/mc_forwarding

是否在該界面上進行 multicast 轉送。

/proc/sys/net/ipv4/conf/DEV/proxy_arp

如果設為 1﹐那麼所有其它界面都會回應以此界面為目的之 arp 請求。當架設 'ip pseudo bridges' 時相當有用。啟用此功能之前﹐請確定您的 netmasks 要非常正確。

/proc/sys/net/ipv4/conf/DEV/rp_filter

請參考逆向路徑過濾章節。

/proc/sys/net/ipv4/conf/DEV/secure_redirects

FIXME: 有待補充

/proc/sys/net/ipv4/conf/DEV/send_redirects

是否要送出前面提到的 redirects。

/proc/sys/net/ipv4/conf/DEV/shared_media

FIXME: 有待補充

/proc/sys/net/ipv4/conf/DEV/tag

FIXME: 有待補充

鄰接原則 (Neighbor pollicy)

DEV 可以只代表一個真實界面﹐也可以是 '全部' 或 '預設值'。而預設值也或許會改變建立的界面設定。

/proc/sys/net/ipv4/neigh/DEV/anycast_delay

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/app_solicit

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/base_reachable_time

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/delay_first_probe_time

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/gc_stale_time

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/locktime

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/mcast_solicit

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/proxy_delay

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/proxy_qlen

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/retrans_time

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/ucast_solicit

FIXME: 有待補充

/proc/sys/net/ipv4/neigh/DEV/unres_qlen

FIXME: 有待補充

路由設定 (Routing settings)

/proc/sys/net/ipv4/route/error_burst

FIXME: 有待補充

/proc/sys/net/ipv4/route/error_cost

FIXME: 有待補充

/proc/sys/net/ipv4/route/flush

FIXME: 有待補充

/proc/sys/net/ipv4/route/gc_elasticity

FIXME: 有待補充

/proc/sys/net/ipv4/route/gc_interval

FIXME: 有待補充

/proc/sys/net/ipv4/route/gc_min_interval

FIXME: 有待補充

/proc/sys/net/ipv4/route/gc_thresh

FIXME: 有待補充

/proc/sys/net/ipv4/route/gc_timeout

FIXME: 有待補充

/proc/sys/net/ipv4/route/max_delay

FIXME: 有待補充

/proc/sys/net/ipv4/route/max_size

FIXME: 有待補充

/proc/sys/net/ipv4/route/min_adv_mss

FIXME: 有待補充

/proc/sys/net/ipv4/route/min_delay

FIXME: 有待補充

/proc/sys/net/ipv4/route/min_pmtu

FIXME: 有待補充

/proc/sys/net/ipv4/route/mtu_expires

FIXME: 有待補充

/proc/sys/net/ipv4/route/redirect_load

FIXME: 有待補充

/proc/sys/net/ipv4/route/redirect_number

FIXME: 有待補充

/proc/sys/net/ipv4/route/redirect_silence

FIXME: 有待補充


Next Previous Contents