LINUX 網絡配置mysql
一些配置文件:linux
/etc/services:服務名稱和端口配置文件web
/etc/hosts :最先主機名對應ip的配置文件
sql
很過人一提到更改hostname首先就想到修改/etc/hosts文件,認爲hostname的配置文件就是/etc/hosts。其實不是的。
hosts文件的做用至關如DNS,提供IP地址到hostname的對應。早期的互聯網計算機少,單機hosts文件裏足夠存放全部聯網計算機。不過隨着互聯網的發展,這就遠遠不夠了。因而就出現了分佈式的DNS系統。由DNS服務器來提供相似的IP地址到域名的對應。具體能夠man hosts。
Linux系統在向DNS服務器發出域名解析請求以前會查詢/etc/hosts文件,若是裏面有相應的記錄,就會使用hosts裏面的記錄。/etc/hosts文件一般裏面包含這一條記錄:
127.0.0.1 localhost.localdomain localhost
hosts文件格式是一行一條記錄,分別是 IP地址 hostname aliases,三者用空白字符分隔,aliases可選。
127.0.0.1到localhost這一條建議不要修改,由於不少應用程序會用到這個,好比sendmail,修改以後這些程序可能就沒法正常運行。
修改hostname後,若是想要在本機上用newhostname來訪問,就必須在/etc/hosts文件裏添加一條newhostname的記錄。好比個人eth0的IP是192.168.1.61,我將hosts文件修改以下:
#hostname blog.infernor.netshell
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.61 blog.infernor.net blog
這樣,我就能夠經過blog或者blog.infernor.net來訪問本機。
從上面這些來看,/etc/hosts於設置hostname是沒直接關係的,僅僅當你要在本機上用新的hostname來訪問本身的時候纔會用到/etc/hosts文件。二者沒有必然的聯繫。
RHEL還有個問題。
我開始在測試的時候,只修改/etc/hosts,裏面添加 192.168.1.61 blog.infernor.net blog,而/etc/sysconfig/network維持原狀,也就是裏面的HOSTNAME=localhost.localdomain。我重啓系統後竟然發現hostname給修改爲了blog.infernor.net。這樣看的話,倒真以爲/etc/hosts是hostname的配置文件。後來終於在/etc/rc.d/rc.sysinit這個啓動腳本里發現了問題的所在。vim
rc.sysinit文件裏一開始就設置了hostname
if [ -f /etc/sysconfig/network ]; then
. /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
HOSTNAME=localhost
fi
確實使用了/etc/sysconfig/network裏的hostname值。不事後面還有一段關於設置hostname的
ipaddr=
if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]
; then
ipaddr=$(ip addr show to 0/0 scope global | awk '/[[:space:]]inet
/ { print gensub("/.*","","g",$2) }')
if [ -n "$ipaddr" ]; then
eval $(ipcalc -h $ipaddr 2>/dev/null)
hostname ${HOSTNAME}
fi
fi
腳本判斷hostname是否爲localhost或者localhost.localdomain,若是是的話,將會使用接口IP地址對應的 hostname來從新設置系統的hostname。問題就出在這裏,個人/etc/sysconfig/network默認的hostname是 localhost.localdomain,eth0的IP是192.168.1.61,而/etc/hosts裏有192.168.1.61的記錄。因而就用192.168.1.61這條記錄來替換了hostname。
估計這也是不少人將/etc/hosts誤覺得是hostname的配置文件的緣由。
hostname帶選項查詢
hostname的-s -f -i等等選項都用到了/etc/hosts或者DNS系統,跟咱們討論的hostname有點遠了,也容易產生誤會。具體能夠man hostname查看。centos
總結一下修改主機名最安全的方法:安全
1. 中止與主機名相關的軟件運行,好比MySQL。服務器
2. 先使用 hostname newname 設置主機名。網絡
3. 在/etc/hosts中修改或增長 ip newname 行,並檢查原來127.0.0.1行localhost迴環的設置。
4. 在/etc/sysconfig/network中修改HOSTNAME=newname。
5. 從新啓動機器並確認是否修改爲功。
============================================================================
/etc/sysconfig/network
$ cat /etc/sysconfig/network
NETWORKING=yes 是否起用網絡
HOSTNAME=cloudweb26.idc1.haodf.net 主機名
NETWORKING_IPV6=no
============================================================================
/etc/resolv.conf: 本機DNS解析
它是DNS客戶機配置文件,用於設置DNS服務器的IP地址及DNS域名,還包含了主機的域名搜索順序。該文件是由域名解析 器(resolver,一個根據主機名解析IP地址的庫)使用的配置文件。它的格式很簡單,每行以一個關鍵字開頭,後接一個或多個由空格隔開的參數。
resolv.conf的關鍵字主要有四個,分別是:
nameserver //定義DNS服務器的IP地址
domain //定義本地域名
search //定義域名的搜索列表
sortlist //對返回的域名進行排序
下面咱們給出一個/etc/resolv.conf的示例:
nameserver 10.3.3.99
nameserver 10.1.0.88
search idc1.baidu.net baidu.net
options single-request-reopen
最主要是nameserver關鍵字,若是沒指定nameserver就找不到DNS服務器,其它關鍵字是可選的。
nameserver 表示解析域名時使用該地址指定的主機爲域名服務器。其中域名服務器是按照文件中出現的順序來查詢的,且只有當第一個nameserver沒有反應時才查詢下面的nameserver。
search 它的多個參數指明域名查詢順序。當要查詢沒有域名的主機,主機將在由search聲明的域中分別查找。
domain 聲明主機的域名。不少程序用到它,如郵件系統;當爲沒有域名的主機進行DNS查詢時,也要用到。若是沒有域名,主機名將被使用,刪除全部在第一個點( .)前面的內容。
domain和search不能共存;若是同時存在,後面出現的將會被使用。
sortlist 容許將獲得域名結果進行特定的排序。它的參數爲網絡/掩碼對,容許任意的排列順序。
「search domainname.com」表示當提供了一個不包括徹底域名的主機名時,在該主機名後添加domainname.com的後 綴;「nameserver」表示解析域名時使用該地址指定的主機爲域名服務器。其中域名服務器是按照文件中出現的順序來查詢的。
其中domainname和search可同時存在,也可只有一個;nameserver可指定多個
========================================分隔線
/etc/nsswitch.conf :這個檔案則是在『決定』先要使用 /etc/hosts 仍是 /etc/resolv.conf 的設定!
============================================================================
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 網卡名
HWADDR=00:0c:29:dd:83:d4 網卡的MAC地址,些地址與網卡設備ROM中固定的地址保持一至
TYPE=Ethernet
ONBOOT=yes 些設備是否隨OS啓動而激活
NM_CONTROLLED=yes MM即NetworkManger 的簡寫,建議設定爲no
BOOTPROTO=static 引導協議:{none|static|dhcp|bootp}
手動 靜態 動態 動態
NETMASK=255.255.255.0
IPADDR=192.168.2.24
GATEWAY=192.168.2.1
USERCTL=no 是否容許普通用戶管理接口,no爲不
PEERDNS=yes 是否容許DHCP服務器提供的DNS服務器地址覆蓋本地/etc/resolv.conf 文件
IPV6INIT=no 是否使用IPV6
IPV6_AUTOCONF=yes 自動配置IPV6
下面命令能夠取出ip
# ifconfig eth0 | grep "inet addr"|awk -F[:" "]+ '{print $4}'
192.168.2.100
============================================================================
經常使用網絡方面命令:
1: host: 這個指令能夠用來查出某個主機名的 IP 喔!舉例來講,咱們想要知道 www.baidu.com 的 IP 時,能夠這樣作:
host -a www.baidu.com
host -a -v www.baidu.com
-a:顯示全部DNS信息
-v:顯示指定詳細信息
查的原理是根據本機/etc/resolv.conf裏指定的DNS的ip 解析出來的
2:nslookup命令是經常使用域名查詢工具,就是查DNS信息用的命令。
nslookup有兩種工做模式,即「交互模式」和「非交互模式」。
在「交互模式」下,用戶能夠向域名服務器查詢各種主機、域名的信息,或者輸出域名中的主機列表。進入交互模式,直接輸入nslookup命令,不加任何參數,則直接進入交互模式
而在「非交互模式」下,用戶能夠針對一個主機或域名僅僅獲取特定的名稱或所需信息。
# nslookup www.baidu.com
此時nslookup會鏈接到默認的域名服務器(即/etc/resolv.conf的第一個dns地址)
3:dig
dig [options] FQDN [@server]
選項與參數:
@server :若是不以 /etc/resolv.conf 的設定來做爲 DNS 查詢,可在此填入其餘的 IP
options:相關的參數不少,主要有 +trace, -t type 以及 -x 三者最經常使用
+trace :就是從 . 開始追蹤,
-t type:查詢的數據主要有 mx, ns, soa 等類型
-x :查詢反解信息,很是重要的項目!
# dig linux.vbird.org
; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> linux.vbird.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37415
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION: <==提出的問題的部分
;linux.vbird.org. IN A
;; ANSWER SECTION: <==主要的回答階段
linux.vbird.org. 600 IN A 140.116.44.180
;; AUTHORITY SECTION: <==其餘與這次回答有關的部分
vbird.org. 600 IN NS dns.vbird.org.
vbird.org. 600 IN NS dns2.vbird.org.
;; Query time: 9 msec
;; SERVER: 168.95.1.1#53(168.95.1.1)
;; WHEN: Thu Aug 4 14:12:26 2011
;; MSG SIZE rcvd: 86
# dig linux.vbing.org @114.114.114.114
# dig linux.vbird.org
# dig -t soa linux.vbird.org
反解:
# dig -x 120.114.100.20
QUESTION(問題):顯示所要查詢的內容,由於咱們是查詢 linux.vbird.org 的 IP,因此這裏顯示 A (Address);
ANSWER(回答):依據剛剛的 QUESTION 去查詢所獲得的結果,答案就是回答 IP 啊!
AUTHORITY(驗證):由這裏咱們能夠知道 linux.vbird.org 是由哪部 DNS 服務器所提供的答案! 結果是 dns.vbird.org 及 dns2.vbird.org 這兩部主機管理的。另外,那個 600 是啥咚咚?圖 19.1-4 提到過的流程,就是容許查詢者可以保留這筆記錄多久的意思 (快取),在 linux.vbird.org 的設定中,預設能夠保留 600 秒。
4:ifconfig
# ifconfig {interface} {up|down} <== 觀察與啓動接口
# ifconfig interface {options} <== 設定與修改接口
選項與參數:
interface:網絡卡接口代號,包括 eth0, eth1, ppp0 等等
options :能夠接的參數,包括以下:
up, down :啓動 (up) 或關閉 (down) 該網絡接口(不涉及任何參數)
mtu :能夠設定不一樣的 MTU 數值,例如 mtu 1500 (單位爲 byte)
netmask :就是子屏蔽網絡;
broadcast:就是廣播地址啊!
# ifconfig -a 顯示全部接口,包括激活接口
# ifconfig eth0 192.168.100.100 netmask 255.255.255.128
5:ifup, ifdown
實時的手動修改一些網絡接口參數,能夠利用 ifconfig 來達成,若是是要直接以配置文件, 亦便是在 /etc/sysconfig/network-scripts 裏面的 ifcfg-ethx 等檔案的設定參數來啓動的話, 那就得要透過 ifdown 或 ifup 來達成了
# ifup eth0
# ifdown eth0
6:route
# route [-nee]
# route add [-net|-host] [網域或主機] netmask [mask] [gw|dev]
# route del [-net|-host] [網域或主機] netmask [mask] [gw|dev]
觀察的參數:
-n :不要使用通信協議或主機名,直接使用 IP 或 port number;
-ee :使用更詳細的信息來顯示
增長 (add) 與刪除 (del) 路由的相關參數:
-net :表示後面接的路由爲一個網域;
-host :表示後面接的爲鏈接到單部主機的路由;
netmask :與網域有關,能夠設定 netmask 決定網域的大小;
gw :gateway 的簡寫,後續接的是 IP 的數值喔,與 dev 不一樣;
dev :若是隻是要指定由那一塊網絡卡聯機出去,則使用這個設定,後面接 eth0 等
Destination, Genmask:這兩個玩意兒就是分別是 network 與 netmask 啦!因此這兩個咚咚就組合成爲一個完整的網域囉!
Gateway:該網域是經過哪一個 gateway 鏈接出去的?若是顯示 0.0.0.0 表示該路由是直接由本機傳送,亦便可以透過局域網絡的 MAC 直接傳訊;若是有顯示 IP 的話,表示該路由須要通過路由器 (通信閘) 的幫忙纔可以傳送出去。
Flags:總共有多個旗標,表明的意義以下:
U (route is up):該路由是啓動的;
H (target is a host):目標是一部主機 (IP) 而非網域;
G (use gateway):須要透過外部的主機 (gateway) 來轉遞封包;
R (reinstate route for dynamic routing):使用動態路由時,恢復路由信息的旗標;
D (dynamically installed by daemon or redirect):已經由服務或轉 port 功能設定爲動態路由
M (modified from routing daemon or redirect):路由已經被修改了;
! (reject route):這個路由將不會被接受(用來抵擋不安全的網域!)
iface:這個路由傳遞封包的接口。
-----------------------------------------------------------------------
7:traceroute [選項與參數] IP
選項與參數:
-n :能夠沒必要進行主機的名稱解析,單純用 IP ,速度較快!
-U :使用 UDP 的 port 33434 來進行偵測,這是預設的偵測協議;
-I :使用 ICMP 的方式來進行偵測;
-T :使用 TCP 來進行偵測,通常使用 port 80 測試
-w :若對方主機在幾秒鐘內沒有回聲就宣告不治...預設是 5 秒
-p 埠號:若不想使用 UDP 與 TCP 的預設埠號來偵測,可在此改變埠號。
-i 裝置:用在比較複雜的環境,若是你的網絡接口不少很複雜時,纔會用到這個參數;
舉例來講,你有兩條 ADSL 能夠鏈接到外部,那你的主機會有兩個 ppp,
你可使用 -i 來選擇是 ppp0 仍是 ppp1 啦!
-g 路由:與 -i 的參數相仿,只是 -g 後面接的是 gateway 的 IP 就是了。
# 範例一:偵測本機到 www.xx.com 去的各節點聯機狀態
[root@www ~]# traceroute -n www.xx.com
traceroute to www.xx.com (119.160.246.241), 30 hops max, 40 byte packets
1 192.168.1.254 0.279 ms 0.156 ms 0.169 ms
2 172.20.168.254 0.430 ms 0.513 ms 0.409 ms
3 10.40.1.1 0.996 ms 0.890 ms 1.042 ms
4 203.72.191.85 0.942 ms 0.969 ms 0.951 ms
5 211.20.206.58 1.360 ms 1.379 ms 1.355 ms
6 203.75.72.90 1.123 ms 0.988 ms 1.086 ms
7 220.128.24.22 11.238 ms 11.179 ms 11.128 ms
8 220.128.1.82 12.456 ms 12.327 ms 12.221 ms
9 220.128.3.149 8.062 ms 8.058 ms 7.990 ms
10 * * *
11 119.160.240.1 10.688 ms 10.590 ms 119.160.240.3 10.047 ms
一、記錄按序列號從1開始,每一個紀錄就是一跳 ,每跳錶示一個網關,咱們看到每行有三個時間,單位是 ms,其實就是-q的默認參數。探測數據包向每一個網關發送三個數據包後,網關響應後返回的時間;若是您用 traceroute -q 4 www.xx.com ,表示向每一個網關發送4個數據包。
二、有時咱們traceroute 一臺主機時,會看到有一些行是以星號表示的。出現這樣的狀況,多是防火牆封掉了ICMP的返回信息,因此咱們得不到什麼相關的數據包返回數據。
三、有時咱們在某一網關處延時比較長,有多是某臺網關比較阻塞,也多是物理設備自己的緣由。固然若是某臺DNS出現問題時,不能解析主機名、域名時,也會 有延時長的現象;您能夠加-n 參數來避免DNS解析,以IP格式輸出數據。
四、若是在局域網中的不一樣網段之間,咱們能夠經過traceroute 來排查問題所在,是主機的問題仍是網關的問題。若是咱們經過遠程來訪問某臺服務器遇到問題時,咱們用到traceroute 追蹤數據包所通過的網關,提交IDC服務商,也有助於解決問題;
因爲目前 UDP/ICMP 的***層出不窮,所以不少路由器可能就此取消這兩個封包的響應功能。因此咱們可使用 TCP 來偵測呦! 例如使用一樣的方法,透過等待時間 1 秒,以及 TCP 80 埠口的狀況下,能夠這樣作:
# traceroute -n -T www.xx.com
8:netstat 命令
常見參數
-a (all)顯示全部選項,默認不顯示LISTEN相關
-t (tcp)僅顯示tcp相關選項
-u (udp)僅顯示udp相關選項
-n 拒絕顯示別名,能顯示數字的所有轉化成數字。
-l 僅列出有在 Listen (監聽) 的服務狀態
-p 顯示創建相關連接的程序名
-r 顯示路由信息,路由表
-e 顯示擴展信息,例如uid等
-s 按各個協議進行統計
-c 每隔一個固定時間,執行該netstat命令。
列出全部端口 netstat -a
列出全部 tcp 端口 netstat -at
列出全部 udp 端口 netstat -au
只顯示監聽端口 netstat -l
只列出全部監聽 tcp 端口 netstat -lt
只列出全部監聽 udp 端口 netstat -lu
只列出全部監聽 UNIX 端口 netstat -lx
顯示全部端口的統計信息 netstat -s
顯示 TCP 或 UDP 端口的統計信息 netstat -st 或 netstat -su
顯示核心路由信息 netstat -r
顯示目前已經啓動的網絡服務 netstat -tunlp
顯示目前全部已經啓動的網絡服務 netstat -atunp
netstat -an參數中stat(狀態)的含義以下:
LISTEN:偵聽來自遠方的TCP端口的鏈接請求;
SYN-SENT:在發送鏈接請求後等待匹配的鏈接請求;
SYN-RECEIVED:在收到和發送一個鏈接請求後等待對方對鏈接請求的確認;
ESTABLISHED:表明一個打開的鏈接,咱們經常使用此做爲併發鏈接數;
FIN-WAIT-1:等待遠程TCP鏈接中斷請求,或先前的鏈接中斷請求的確認;
FIN-WAIT-2:從遠程TCP等待鏈接中斷請求;
CLOSE-WAIT:等待從本地用戶發來的鏈接中斷請求;
CLOSING:等待遠程TCP對鏈接中斷的確認;
LAST-ACK:等待原來發向遠程TCP的鏈接中斷的確認;
TIME-WAIT:等待足夠的時間以確保遠程TCP鏈接收到中斷請求的確認;
CLOSED:沒有任何鏈接狀態;
在平常工做中,咱們能夠用shell組合命令來查看服務器的TCP鏈接狀態並彙總,命令以下:
netstat -an|awk '/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}'
參數說明:
CLOSED: 沒有鏈接活動或正在進行的;
LISTEN: 服務器正在等待的進入呼叫;
SYN_RECV:一個鏈接請求已經到達,等待確認;
SYN_SENT:應用已經開始,打開一個鏈接;
ESTABLISHED:正常數據傳輸狀態,也能夠近似的理解爲當前服務器的併發數;
FIN_WAIT1:應用已經完成;
FIN_WAIT2:另外一邊贊成釋放;
ITMED_WAIT:等待全部分組死掉;
CLOSING:兩邊同時嘗試關閉;
TIME_WAIT:另外一邊已初始化一個釋放;
LAST_ACK:等待全部分組死掉;
統計 TCP鏈接數 命令:
netstat -an |grep 'ESTABLISHED' |grep 'tcp' |wc -l
[root@centos ~]# vim /etc/security/limits.conf
* hard nofile 65535
* soft nofile 65535
/etc/rc.local
ulimit -SHn 65535 直接寫入/etc/rc.local中