『壹』 linux 使用命令修改網路參數與同通過配置文件修改參數的特點和差異
◆執行網路配置命令修改:簡單、快速、效率高,適合在調試網路過程中臨時使用。但這種 方式通常是直接修改目前運行內核中的網路參數,由於內核是只讀性質,因此修改的網路參數無 法保存,重啟系統後將失效。 ◆直接修改網路配置文件:直接在各項網路參數所對應的配置文件中進行修改,更適合在配 置伺服器主機時使用。修改網路配置文件後,一般需要重新載入網路服務或重啟系統,所作的修 改才會生效。
『貳』 Linux常用內核網路參數及修改方法
在修改內核參數前,需要注意以下幾點:
本文提供以下兩種修改Linux實例內核參數的方法。
/proc/sys/ 目錄是Linux內核在啟動後生成的偽目錄,其目錄下的 net 文件夾中存放了當前系統中開啟的所有內核參數,目錄樹結構與參數的完整名稱相關,如 net.ipv4.tcp_tw_recycle ,它對應的文件是 /proc/sys/net/ipv4/tcp_tw_recycle 文件,文件的內容就是參數值。方法一中修改的參數值僅在當前運行中生效,系統重啟後會回滾到歷史值,一般用於臨時性驗證修改的效果。若需要永久性修改,請參見方法二。
『叄』 如何用命令行設置linux內核參數
Linux設置內核參數的方法
1 內核參數的查看方法
使用「sysctl -a」命令可以查看所有正在使用的內核參數。內核參數比較多(一般多達500項),按照前綴主要分為以下幾大類:net.ipv4、net.ipv6、net.core、vm、fs、dev.parport、dev.cdrom 、dev.raid、kernel等等。相同的linux,安裝的組件和使用的方式不一樣,正在使用的內核參數是不一樣的。
所有的內核參數的說明文檔是放到/usr/src/linux/Documentation/sysctl中的,如果想知道對內核參數的說明,可以到該目錄下查看相應的說明文檔。
2 內核參數的的設置方法
由於Linux的內核參數信息都存在內存中,因此可以通過命令直接修改,並且修改後直接生效。也可以通過文件的方式進行設置。下面就介紹這兩種修改方法。
2.1 命令設置的方式
可以用兩種方法實現。
1、使用「sysctl -w 參數名=值」的方式
假設我們把net.ipv4.ip_forward的值修改為1,使用命令「sysctl -w net.ipv4.ip_forward=1」。
2、修改內核參數對應的proc文件
內核參數位於/proc/sys/之下,參數名稱是以文件所在的路徑,並將「/」以「.」來取代。舉例來說,/proc/sys/net/ip_forward的參數名稱為net.ipv4.ip_forward。
同樣把net.ipv4.ip_forward的值修改為1,使用命令「echo 「1」 > /proc/sys/net/ipv4/ip_forward」。
注意,這里proc文件跟普通的文件不一樣。一般一個文件用echo寫入內容之後,會變成一個文本文件,但echo修改proc文件之後還是個空文件。
『肆』 如何修改 Linux 內核配置
由於Linux的內核參數信息都存在內存中,因此可以通過命令直接修改,並且修改後直接生效。但是,當系統重新啟動後,原來設置的參數值就會丟失,而系統每次啟動時都會自動去/etc/sysctl.conf文件中讀取內核參數,因此將內核的參數配置寫入這個文件中,是一個比較好的選擇。
首先打開/etc/sysctl.conf文件,查看如下兩行的設置值,這里是:
kernel.shmall
=
2097152
kernel.shmmax
=
4294967295
如果系統默認的配置比這里給出的值大,就不要修改原有配置。同時在/etc/sysctl.conf文件最後,添加以下內容:
fs.file-max
=
6553600
kernel.shmmni
=
4096
kernel.sem
=
250
32000
100
128
net.ipv4.ip_local_port_range
=
1024
65000
net.core.rmem_default
=
4194304
net.core.rmem_max
=
4194304
net.core.wmem_default
=
262144
net.core.wmem_max
=
262144
這里的「fs.file-max
=
6553600」其實是由「fs.file-max
=
512
*
PROCESSES」得到的,我們指定PROCESSES的值為12800,即為「fs.file-max
=512
*12800」。
sysctl.conf文件修改完畢後,接著執行「sysctl
-p」使設置生效。
[root@localhost
~]#
sysctl
-p
常用的內核參數的含義如下。
kernel.shmmax:表示單個共享內存段的最大值,以位元組為單位,此值一般為物理內存的一半,不過大一點也沒關系,這里設定的為4GB,即「4294967295/1024/1024/1024=4G」。
kernel.shmmni:表示單個共享內存段的最小值,一般為4kB,即4096bit.
kernel.shmall:表示可用共享內存的總量,單位是頁,在32位系統上一頁等於4kB,也就是4096位元組。
fs.file-max:表示文件句柄的最大數量。文件句柄表示在Linux系統中可以打開的文件數量。
ip_local_port_range:表示埠的范圍,為指定的內容。
kernel.sem:表示設置的信號量,這4個參數內容大小固定。
net.core.rmem_default:表示接收套接字緩沖區大小的預設值(以位元組為單位)。
net.core.rmem_max
:表示接收套接字緩沖區大小的最大值(以位元組為單位)
net.core.wmem_default:表示發送套接字緩沖區大小的預設值(以位元組為單位)。
net.core.wmem_max:表示發送套接字緩沖區大小的最大值(以位元組為單位)。
『伍』 Linux配置網路參數之IP地址、子網掩碼、網關地址,DNS
修改網卡命令規則 (eth0、eth1、eth2……)
打開grub內核引導程序,在……quiet 後面添加:
讓網卡命名規則生效
nmcli命令刪除錯誤網卡命名
nmcli命令添加網卡命名
解析: nmcli connection 添加 類型 乙太網設備 網卡設備名為eth0 nmcli命令的命名為eth0
修改IP地址、子網掩碼、網關地址、DNS
解析:nmcli connection 修改 網卡名 ipv4.方法 手工配置 ipv4.地址192.168.4.7/24 ipv4.網關 192.168.4.254 每次開機自動啟用以上所有參數
查看網卡配置文件
查看網關地址信息
『陸』 Linux如何在系統運行過程中修改內核參數
RedHat向管理員提供了非常好的方法,使我們可以在系統運行時更改內核參數,而不需要重新引導系統。這是通過/PRoc虛擬文件系統實現的。/proc/sys目錄下存放著大多數的內核參數,並且設計成可以在系統運行的同時進行更改。下面我們以打開內核的 ip轉發功能為例說明在系統運行時修改內核參數的兩種方法。IP轉發是指允許系統對來源和目的地都不是本機的數據包通過網路,RedHat默認屏蔽此功能,在 需要用本機作為路由器、NAT等情況下需要開啟此功能。 方法一:修改/proc下內核參數文件內容 直接修改內核參數ip_forward對應在/proc下的文件/proc/sys/net/ipv4/ip_forward。用下面命令查看ip_forward文件內容: # cat /proc/sys/net/ipv4/ip_forward 該文件默認值0是禁止ip轉發,修改為1即開啟ip轉發功能。修改命令如下: # echo 1 >/proc/sys/net/ipv4/ip_forward 修改過後就馬上生效,即內核已經打開ip轉發功能。但如果系統重啟後則又恢復為默認值0,如果想永久打開需要通過修改/etc/sysctl.conf文件的內容來實現。 方法二.修改/etc/sysctl.conf文件 默認sysctl.conf文件中有一個變數是 net.ipv4.ip_forward = 0 將後面值改為1,然後保存文件。因為每次系統啟動時初始化腳本/etc/rc.d/rc.sysinit會讀取/etc/sysctl.conf文件的內容,所以修改後每次系統啟動時都會開啟ip轉發功能。但只是修改sysctl文件不會馬上生效,如果想使修改馬上生效可以執行下面的命令: # sysctl –p 在修改其他內核參數時可以向/etc/sysctl.conf文件中添加相應變數即可,下面介紹/proc/sys下內核文件與配置文件 sysctl.conf中變數的對應關系,由於可以修改的內核參數都在/proc/sys目錄下,所以sysctl.conf的變數名省略了目錄的前面部 分(/proc/sys)。 將/proc/sys中的文件轉換成sysctl中的變數依據下面兩個簡單的規則: 1.去掉前面部分/proc/sys 2.將文件名中的斜杠變為點 這兩條規則可以將/proc/sys中的任一文件名轉換成sysctl中的變數名。 例如: /proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward /proc/sys/kernel/hostname =》 kernel.hostname 可以使用下面命令查詢所有可修改的變數名 # sysctl –a 下面例舉幾個簡單的內核參數: 1./proc/sys/kernel/shmmax 該文件指定內核所允許的最大共享內存段的大小。 2./proc/sys/kernel/threads-max 該文件指定內核所能使用的線程的最大數目。 3./proc/sys/kernel/hostname 該文件允許您配置網路主機名。
『柒』 RedHatLinux修改內核參數,不是很懂,求指點,謝謝
/proc 裡面的文件都不是真的,他是一個特殊的文件系統。
修改這些設置我記得是在 /etc/ 裡面有一個配置,設置好後用一個軟體來刷新這個內核配置。
如果自己直接修改的話,最好是 echo xxxxx > /proc/xxx/xxx/xxx 的方式修改。
『捌』 一般優化linux的內核,需要優化什麼參數
首先要知道一點所有的TCP/IP的參數修改是臨時的,因為它們都位於/PROC/SYS/NET目錄下,如果想使參數長期保存,可以通過編輯/ETC/SYSCTL.CONF文件來實現,這里不做詳細說明,只針對Linux的TCPIP內核參數優化列舉相關參數:
1、為自動調優定義socket使用的內存
2、默認的TCP數據接收窗口大小(位元組)
3、最大的TCP數據接收窗口
4、默認的TCP發送窗口大小
5、最大的TCP數據發送窗口
6、在每個網路介面接收數據包的速率比內核處理這些包速率快時,允許送到隊列的數據包最大數目
7、定義了系統中每一個埠最大的監聽隊列長度
8、探測消息未獲得相應時,重發該消息的間隔時間
9、在認定tcp連接失效之前,最多發送多少個keepalive探測消息等。
『玖』 linux 內核參數優化
一、Sysctl命令用來配置與顯示在/proc/sys目錄中的內核參數.如果想使參數長期保存,可以通過編輯/etc/sysctl.conf文件來實現。
命令格式:
sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p (default /etc/sysctl.conf)
sysctl [-n] [-e] –a
常用參數的意義:
-w 臨時改變某個指定參數的值,如
# sysctl -w net.ipv4.ip_forward=1
-a 顯示所有的系統參數
-p從指定的文件載入系統參數,默認從/etc/sysctl.conf 文件中載入,如:
以上兩種方法都可能立即開啟路由功能,但如果系統重啟,或執行了
# service network restart
命令,所設置的值即會丟失,如果想永久保留配置,可以修改/etc/sysctl.conf文件,將 net.ipv4.ip_forward=0改為net.ipv4.ip_forward=1
二、linux內核參數調整:linux 內核參數調整有兩種方式
方法一:修改/proc下內核參數文件內容,不能使用編輯器來修改內核參數文件,理由是由於內核隨時可能更改這些文件中的任意一個,另外,這些內核參數文件都是虛擬文件,實際中不存在,因此不能使用編輯器進行編輯,而是使用echo命令,然後從命令行將輸出重定向至 /proc 下所選定的文件中。如:將 timeout_timewait 參數設置為30秒:
參數修改後立即生效,但是重啟系統後,該參數又恢復成默認值。因此,想永久更改內核參數,需要修改/etc/sysctl.conf文件
方法二.修改/etc/sysctl.conf文件。檢查sysctl.conf文件,如果已經包含需要修改的參數,則修改該參數的值,如果沒有需要修改的參數,在sysctl.conf文件中添加參數。如:
net.ipv4.tcp_fin_timeout=30
保存退出後,可以重啟機器使參數生效,如果想使參數馬上生效,也可以執行如下命令:
三、sysctl.conf 文件中參數設置及說明
proc/sys/net/core/wmem_max
最大socket寫buffer,可參考的優化值:873200
/proc/sys/net/core/rmem_max
最大socket讀buffer,可參考的優化值:873200
/proc/sys/net/ipv4/tcp_wmem
TCP寫buffer,可參考的優化值: 8192 436600 873200
/proc/sys/net/ipv4/tcp_rmem
TCP讀buffer,可參考的優化值: 32768 436600 873200
/proc/sys/net/ipv4/tcp_mem
同樣有3個值,意思是:
net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力.
net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段.
net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket.
上述內存單位是頁,而不是位元組.可參考的優化值是:786432 1048576 1572864
/proc/sys/net/core/netdev_max_backlog
進入包的最大設備隊列.默認是300,對重負載伺服器而言,該值太低,可調整到1000
/proc/sys/net/core/somaxconn
listen()的默認參數,掛起請求的最大數量.默認是128.對繁忙的伺服器,增加該值有助於網路性能.可調整到256.
/proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默認10K
/proc/sys/net/ipv4/tcp_max_syn_backlog
進入SYN包的最大請求隊列.默認1024.對重負載伺服器,可調整到2048
/proc/sys/net/ipv4/tcp_retries2
TCP失敗重傳次數,默認值15,意味著重傳15次才徹底放棄.可減少到5,盡早釋放內核資源.
/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_intvl
/proc/sys/net/ipv4/tcp_keepalive_probes
這3個參數與TCP KeepAlive有關.默認值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某個TCP連接在idle 2個小時後,內核才發起probe.如果probe 9次(每次75秒)不成功,內核才徹底放棄,認為該連接已失效.對伺服器而言,顯然上述值太大. 可調整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
/proc/sys/net/ipv4/ip_local_port_range
指定埠范圍的一個配置,默認是32768 61000,已夠大.
net.ipv4.tcp_syncookies = 1
表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1
表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1
表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。預設是2小時,改為20分鍾。
net.ipv4.ip_local_port_range = 1024 65000
表示用於向外連接的埠范圍。預設情況下很小:32768到61000,改為1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網路連接數。
net.ipv4.tcp_max_tw_buckets = 5000
表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並列印警告信息。默認為 180000,改為 5000。對於Apache、Nginx等伺服器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid伺服器被大量的TIME_WAIT套接字拖死。
Linux上的NAT與iptables
談起Linux上的NAT,大多數人會跟你提到iptables。原因是因為iptables是目前在linux上實現NAT的一個非常好的介面。它通過和內核級直接操作網路包,效率和穩定性都非常高。這里簡單列舉一些NAT相關的iptables實例命令,可能對於大多數實現有多幫助。
這里說明一下,為了節省篇幅,這里把准備工作的命令略去了,僅僅列出核心步驟命令,所以如果你單單執行這些沒有實現功能的話,很可能由於准備工作沒有做好。如果你對整個命令細節感興趣的話,可以直接訪問我的《如何讓你的Linux網關更強大》系列文章,其中對於各個腳本有詳細的說明和描述。
EXTERNAL="eth0"
INTERNAL="eth1"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $EXTERNAL -j MASQUERADE
LOCAL_EX_IP=11.22.33.44 #設定網關的外網卡ip,對於多ip情況,參考《如何讓你的Linux網關更強大》系列文章
LOCAL_IN_IP=192.168.1.1 #設定網關的內網卡ip
INTERNAL="eth1" #設定內網卡
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -t nat -A PREROUTING -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192.168.1.10
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to $LOCAL_IN_IP
iptables -A FORWARD -o $INTERNAL -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A OUTPUT -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192.168.1.10
獲取系統中的NAT信息和診斷錯誤
了解/proc目錄的意義
在Linux系統中,/proc是一個特殊的目錄,proc文件系統是一個偽文件系統,它只存在內存當中,而不佔用外存空間。它包含當前系統的一些參數(variables)和狀態(status)情況。它以文件系統的方式為訪問系統內核數據的操作提供介面
通過/proc可以了解到系統當前的一些重要信息,包括磁碟使用情況,內存使用狀況,硬體信息,網路使用情況等等,很多系統監控工具(如HotSaNIC)都通過/proc目錄獲取系統數據。
另一方面通過直接操作/proc中的參數可以實現系統內核參數的調節,比如是否允許ip轉發,syn-cookie是否打開,tcp超時時間等。
獲得參數的方式:
第一種:cat /proc/xxx/xxx,如 cat /proc/sys/net/ipv4/conf/all/rp_filter
第二種:sysctl xxx.xxx.xxx,如 sysctl net.ipv4.conf.all.rp_filter
改變參數的方式:
第一種:echo value > /proc/xxx/xxx,如 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
第二種:sysctl [-w] variable=value,如 sysctl [-w] net.ipv4.conf.all.rp_filter=1
以上設定系統參數的方式只對當前系統有效,重起系統就沒了,想要保存下來,需要寫入/etc/sysctl.conf文件中
通過執行 man 5 proc可以獲得一些關於proc目錄的介紹
查看系統中的NAT情況
和NAT相關的系統變數
/proc/slabinfo:內核緩存使用情況統計信息(Kernel slab allocator statistics)
/proc/sys/net/ipv4/ip_conntrack_max:系統支持的最大ipv4連接數,默認65536(事實上這也是理論最大值)
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 已建立的tcp連接的超時時間,默認432000,也就是5天
和NAT相關的狀態值
/proc/net/ip_conntrack:當前的前被跟蹤的連接狀況,nat翻譯表就在這里體現(對於一個網關為主要功能的Linux主機,裡面大部分信息是NAT翻譯表)
/proc/sys/net/ipv4/ip_local_port_range:本地開放埠范圍,這個范圍同樣會間接限制NAT表規模
cat /proc/sys/net/ipv4/ip_conntrack_max
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
cat /proc/net/ip_conntrack
cat /proc/sys/net/ipv4/ip_local_port_range
wc -l /proc/net/ip_conntrack
grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print 2;}'
grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print 3;}'
cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10
cat /proc/net/ip_conntrack | perl -pe s/^(.*?)src/src/g | cut -d ' ' -f1 | cut -d '=' -f2 | sort | uniq -c | sort -nr | head -n 10