參考 《Linux雲端計算運維》-馬哥教育·王曉春
當Linux向外界主機傳送資料時,在它從網路卡流入後需要對它做路由策略,根據其目標決定是流入本機資料還是轉發給其他主機
Linux主機和路由器不同,路由器本身就是為了轉發封包,所以路由器內部預設就能在不同網路卡間轉發封包,而Linux主機預設未開啟ip_forward功能,所以Linux預設不能轉發,這使得待轉發封包會被丟棄。
另外,IP地址是屬於核心的(不僅如此,整個TCP/IP協定棧都屬於核心),只要能和其中一個地址通訊,就能和另一個地址通訊,而不管是否開啟了封包轉發功能。
例如某Linux主機有兩個網路卡ETH0:172.16.10.5和eth1:192.168.100.20,某192.168.100.22主機閘道器指向192.168.100.20,若它ping172.16.10.5,結果將是通的,因為地址屬於核心,從eth1進來的封包被核心分析時,發現目標地址為本機地址,直接就回應192.168.100.22,迴應封包繼續從eth1出去。
但如果不開啟封包轉發功能,則這些網路卡之間是無法衚衕的,192.168.100.22能ping通172.160.10.5,但卻無法ping通Linux主機該網路卡同網段的另一臺主機172.168.10.6
在linux上開啟轉發功能:
臨時有效
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
永久有效
centos6中將/etc/sysctl.conf中的net.ipv4.ip_forward值改為1
centos7將systemd管理了除/etc/sysctl.conf還有
/etc/sysctl.d/*.conf和/usr/lib/sysctl.d/*.conf
建議寫在/etc/sysctl.d/*.conf中,這是systemd提供自定義核心修改項的目錄
echo "net.ipv4.ip_forward=1" >/etc/sysctl.d/ip_forward.conf
網路卡型別:
RHEL5: /etc/modprobe.conf
RHEL6: /etc/udev/rules.d/70-persisten-net.rules
centos7,8: /etc/sysconfig/grub.cfg #在組態檔中禁用系統命令預設命名。
編輯grub組態檔」/etc/sysconfig/grub「:
在」GRUB_CMDLINE_LINUX「變數最後新增一句」 net.ifnames=0「.
grub2-mkconfig -o /boot/grub2/grub.cfg ;
root
上面只是改了網路卡的名稱,要想設定IP地址,需要到各自的組態檔中設定。組態檔中的網路卡名稱要與修改後的網路卡名稱保持一致。
臨時修改網路卡名稱:
ip link set eth0 down
ip link set eth0 name abc
ip link set abc up
dmesg |grep –i eth
ethtool -i eth0
解除安裝網路卡驅動
modprobe -r e1000
rmmod e1000
裝載網路卡驅動
modprobe e1000
[root@maple ~]# mii-tool eth0
eth0: negotiated 1000baseT-FD flow-control, link ok
[root@maple ~]# mii-tool -v eth0
eth0: negotiated 1000baseT-FD flow-control, link ok
product info: Yukon 88E1011 rev 3
basic mode: autonegotiation enabled
basic status: autonegotiation complete, link ok
capabilities: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
link partner: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
[root@maple-c7 ~]# mii-tool eth1
eth1: no link
[root@maple-c7 ~]# ethtool eth1
Settings for eth1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: Unknown!
Duplex: Unknown! (255)
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: no
[root@maple-c7 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:0d:bd:2d brd ff:ff:ff:ff:ff:ff
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
link/ether 00:0c:29:0d:bd:37 brd ff:ff:ff:ff:ff:ff
[root@maple /]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
[root@maple /]# echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range
[root@maple /]# cat /proc/sys/net/ipv4/ip_local_port_range
20000 62000
— arbitrary TCP and UDP connections and listens 監聽一個任意的tcp和UDP連線
#伺服器啟動監聽
[root@maple data]# nc -l 9527
#使用者端連線埠
root@ubuntu1804:~# nc 10.0.0.150 9527 #輸入字元,伺服器端可以看到。
hello,I am ubuntu
[root@maple data]# < /dev/tcp/127.0.0.1/80
-bash: connect: Connection refused
-bash: /dev/tcp/127.0.0.1/80: Connection refused
[root@maple data]# < /dev/tcp/127.0.0.1/2
-bash: connect: Connection refused
-bash: /dev/tcp/127.0.0.1/2: Connection refused
[root@maple data]# < /dev/tcp/127.0.0.1/22
[root@maple data]#
[root@maple data]#
[root@maple data]# echo $?
0
[root@maple data]# nc -l 22
nc: Address already in use
[root@maple data]# ss -tlnp |grep 22
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=834,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=834,fd=6))
[root@maple data]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 834 root 4u IPv4 27552 0t0 TCP *:ssh (LISTEN)
sshd 834 root 6u IPv6 27554 0t0 TCP *:ssh (LISTEN)
sshd 1123 root 5u IPv4 30846 0t0 TCP maple.com:ssh->10.0.0.1:ottp (ESTABLISHED)
sshd 1136 maple 5u IPv4 30846 0t0 TCP maple.com:ssh->10.0.0.1:ottp (ESTABLISHED)
[root@maple data]#
[root@maple pam.d]# ip neigh
10.0.0.2 dev eth0 lladdr 00:50:56:e7:7f:3e STALE
10.0.0.1 dev eth0 lladdr 00:50:56:c0:00:08 REACHABLE
[root@maple pam.d]# arp -n
Address HWtype HWaddress Flags Mask Iface
10.0.0.2 ether 00:50:56:e7:7f:3e C eth0
10.0.0.1 ether 00:50:56:c0:00:08 C eth0
[root@maple ~]# arping 10.0.0.151ARPING 10.0.0.151 from 10.0.0.150 eth0
Unicast reply from 10.0.0.151 [00:0C:29:AD:3D:7D] 1.145ms
Unicast reply from 10.0.0.151 [00:0C:29:AD:3D:7D] 1.072ms
Unicast reply from 10.0.0.151 [00:0C:29:AD:3D:7D] 1.112ms
arp -s ip mac
#伺服器端
[root@maple-c8 ~]# yum install -y nc
[root@maple-c8 ~]# nc -lv 6666 #監聽6666埠
#使用者端
[root@maple-c7 ~]# bash -i &> /dev/tcp/10.0.0.150/6666 0>&1
#伺服器端:輸入hostname檢視
[root@maple-c8 ~]# nc -lv 6666
Listening on 0.0.0.0 6666
Connection received on 10.0.0.152 53358
[root@maple-c7 ~]#
[root@maple-c7 ~]# hostname
hostname
maple-c7.maple.com
centos6的主機名設定
hostname HOSTNAME #立即生效,但不是永久有效;
vim /etc/sysconfig/network #永久有效,重新啟動
HOSTNAME=www.magedu.com
NETWORKING=yes #本機是否啟用網路功能的開關
NETWORKING_IPV6=no #是否啟用ipv6
GATEWAY= #也可以定義閘道器,以網路卡組態檔為準
centos7,8和ubuntu主機名設定
hostnamectl set-hostname www.maple.com #直接生效,組態檔也會更新,退出重新登入即可。
組態檔所在地是/etc/hostname
ifconfig命令:來自net-tools包,不推薦使用了,建議使用ip
ifconfig [ethx] ##檢視當前系統活動的網路卡。
-a #顯示所有介面資訊
ifconifg eth0 10.1.1.1/24 #設定立即生效,重新啟動網路服務或主機不生效
ifocnfig eth0:1 192.168.3.253 #設定eth0的第二個IP地址
ifconfig eth0 down #將一個介面禁用
ifconfig eth0 0 #清除eth0上面的地址
#關閉ICMP響應 使其不返回ping響應包
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
來自net-tools包,不推薦使用了,建議使用ip
路由表主要構成:
檢視路由:
route [-n] ##直接檢視路由表
#-n以數位方式顯示各主機或埠等相關資訊
新增:route add
route add [-net|-host|default] target [netmask Nm] [gw GW] [[dev] If]
-host #主機路由
-net #到某一個網路的
default #預設路由 ,這三個選項不寫,預設新增主機路由。
route add -net 20.0.10.0/24 gw 10.0.0.152 ##到達20.0.10.0/24網路的路由下一跳是10.0.0.152
route add -net 20.0.10.0 netmask 255.255.255.0 gw 10.0.0.152 #還可以寫成netmask
route add -net 20.0.11.0/24 eth0 #到達20.0.11.0/24網路路由的出介面是eth01
route add [-host] 1.1.1.1 eth1 #新增到1.1.1.1的主機路由
route add default gw 10.0.0.2 #新增預設路由,指向閘道器
刪除:route del
route del [-A] # -A指定地址型別,預設為ipv4
route del -net 10.0.0.0/8
route del -net 20.0.10.0/24
route del -net 20.0.11.0/24
route del default
route del 1.1.1.1
route del default
範例:實現靜態路由
四臺主機:
A主機:eth0 NAT模式
R1主機:eth0 NAT模式,eth1 vmnet1模式
R2主機:eth1 vmnet1模式,eth0 vmnet2模式
B主機:eth0 vmnet2模式
A主機
ifconfig eth0 10.0.0.123/8
route add default gw 10.0.0.200
R1:
ifconfig eth0 10.0.0.200/8
ifconfig eth1 192.168.0.200/24
route add -net 172.16.0.0/16 gw 192.168.0.201
echo 1 > /proc/sys/net/ipv4/ip_forward
R2:
ifconfig eth1 192.168.0.201/24
ifconfig eth0 172.16.0.200/16
route add -net 10.0.0.0/8 gw 192.168.0.200
echo 1 > /proc/sys/net/ipv4/ip_forward
B主機:
ifconfig eth0 172.16.0.123/16
route add default gw 172.16.0.200
來自net-utools包,建議使用ss替代
-r:顯示路由表
-n:以數位方式顯示
-t:建立的tcp連線
-u:建立的udp連線 udp顯示不出來,因為是無連線的協定
-l:顯示監聽狀態的連線
-p:顯示監聽指定的通訊端的程序號和程序名
來自於iproute包,可用於代理ifconfig
命令說明:
OBJECT := { link | addr | route }
ip link - network device configuration
set dev IFACE,可設定屬性:up and down:啟用或禁用指定介面,相當於 ifup/ifdown
show [dev IFACE] [up]::指定介面 ,up 僅顯示處於啟用狀態的介面
man幫助:ip(8), ip-address(8), ip-link(8), ip-route(8)
ip
link:設定網路介面鏈路層屬性
show #檢視網路介面地址
ip -s link show #顯示統計發出的報文
set
ip link set DEV {up|down}
ip link set eth0 address 52:54:00:af:15:b1 #修改網路卡MAC地址
addr:設定網路層屬性
add
ip addr add 10.2.2.2/24 dev eth1
ip addr add 10.3.3.3/24 dev eth1 label eth1:1 #增加網路卡別名實現一個網路卡多個IP
del
ip addr del 10.2.2.2/24 dev eth1
show
ip addr show to 10/8
flush
ip addr flush dev eth0 #清除網路地址
route:路由
ip route add to 10.0.0.8/8 dev eth0 via 172.16.0.1
ip route del 10.0.0.8/8
修改IP:先新增新IP,在刪除舊IP
[root@maple-c8 ~]# ip a a 127.0.0.10/8 dev lo
[root@maple-c8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 127.0.0.10/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:1e:5a:b6 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
[root@maple-c8 ~]# ip a d 127.0.0.1/8 dev lo
[root@maple-c8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.10/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:1e:5a:b6 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
範例:設定ip地址定時消失,預設是forever
[root@maple-c8 ~]# ip add a 1.1.1.1/32 dev eth0 preferred_lft 20 valid_lft 30
[root@maple-c8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:1e:5a:b6 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 1.1.1.1/32 scope global dynamic eth0
valid_lft 28sec preferred_lft 18sec
[root@maple-c8 ~]#
#30s後消失
[root@maple-c8 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:1e:5a:b6 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
來自於iproute包,代替netstat,netstat 通過遍歷 /proc來獲取 socket資訊,ss 使用 netlink與核心tcp_diag 模組通訊獲取 socket 資訊
格式:
ss [OPTION]... [FILTER]
OPTION
-t: tcp協定相關
-u: udp協定相關
-w: 裸通訊端相關
-x:unix sock相關
-l: listen狀態的連線
-a: 所有
-n: 數位格式
-p: 相關的程式及PID
-e: 擴充套件的資訊
-m:記憶體用量
-o:計時器資訊
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
TCP的常見狀態:
tcp finite state machine:
LISTEN: 監聽
ESTABLISHED:已建立的連線
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
EXPRESSION:
dport =
sport =
常用組合:
-tan,-tanl,-tanlp,-uan
常見用法:
#顯示本地開啟的所有埠
ss -l
#顯示每個程序具體開啟的socket
ss -pl
#顯示所有tcp socket
ss -t -a
#顯示所有的UDP Socekt
ss -u -a
#顯示所有已建立的ssh連線
ss -o state established '( dport = :ssh or sport = :ssh )'
#顯示所有已建立的HTTP連線
[root@maple-c8 ~]# ss -o state established '( dport = :ssh or sport = :ssh )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 10.0.0.150:ssh 10.0.0.1:fmwp timer:(keepalive,71580min,0)
tcp 0 96 10.0.0.150:ssh 10.0.0.1:10236 timer:(on,235ms,0)
tcp 0 0 10.0.0.150:ssh 10.0.0.1:jaus timer:(keepalive,52sec,4)
#顯示socket詳細資訊
[root@maple-c8 ~]# ss -s
Total: 194
TCP: 5 (estab 3, closed 0, orphaned 0, timewait 0)
Transport Total IP IPv6
RAW 0 0 0
UDP 2 1 1
TCP 5 4 1
INET 7 5 2
FRAG 0 0 0
network #5和6使用
NetworkManager #7使用,和network衝突
nmcli #nmtui命令列工具,可以實現鏈路聚合
依賴NetworkManager服務,此服務是管理和監控網路設定的守護行程
安裝 bash-completion包可以 按tab鍵提示命令
nmcli命令:
對於一個網路介面,可以設定多個網路連線,根據需要up相應的connection
格式
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage network interfaces
nmcli device help #相當於 ip link
connection - start, stop, and manage network connections
nmcli connection help #相當於 ip a
修改組態檔屬性使其生效
nmcli con reload
nmcli con up con-name
命令對比
nmcli | 組態檔 |
---|---|
nmcli con mod | ifcfg**-*** 檔案 |
ipv4.method manual | BOOTPROTO=none |
ipv4.method auto | BOOTPROTO=dhcp |
ipv4.addresses 192.168.2.1/24 | IPADDR=192.168.2.1 PREFIX=24 |
ipv4.gateway 172.16.0.200 | GATEWAY=192.0.2.254 |
ipv4.dns 8.8.8.8 | DNS0=8.8.8.8 |
ipv4.dns-search example.com | DOMAIN=example.com |
ipv4.ignore-auto-dns true | PEERDNS=no |
connection.autoconnect yes | ONBOOT=yes |
connection.id eth0 | NAME=eth0 |
connection.interface-name eth0 | DEVICE=eth0 |
802-3-ethernet.mac-address . . . | HWADDR= . . . |
nmcli dev status | show [IFACE] #檢視裝置狀態,指定網路卡名稱會顯示更多資訊
nmcli con show [CON-NAME] #顯示連線狀態,指定邏輯連線名稱會顯示更多資訊
nmcli con add con-name home-eth0 type ethernet ifname eno2 #新增網路介面, #ifname=物理介面
nmcli con up home-eth0 #啟用連線之後,會自動獲取IP地址
nmcli con del home-eth0 #刪除邏輯連線
nmcli con up eno2 #啟動連線
nmcli con down eno2 #禁用連線
nmcli con mod home-eth0
ipv4.addresses "192.0.2.124/24 192.0.2.254" #ip+閘道器
ipv4.dns 8.8.8.8
ipv4.method manual #ipv4的設定方式,auto是dhcp
ipv4.method auto #ipv4的自動設定方式
connection.autoconnect yes ##每次開機自動啟動網路卡
connection.id eth0
---
#修改連線設定
nmcli con mod 「static」 connection.autoconnect no
nmcli con mod 「static」 ipv4.dns 172.25.X.254
nmcli con mod 「static」 +ipv4.dns 8.8.8.8
nmcli con mod 「static」 -ipv4.dns 8.8.8.8
nmcli con mod 「static」 ipv4.addresses 「172.16.X.10/24 172.16.X.254」
nmcli con mod 「static」 +ipv4.addresses 10.10.10.10/16
#DNS設定存放在/etc/resolv.conf,PEERDNS=no 表示當IP通過dhcp自動獲取時,dns仍是手動設定,
不自動獲取等價於下面命令
nmcli con mod 「system eth0」 ipv4.ignore-auto-dns yes
nmcli設定bond:
#新增bonding介面
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
ipv4.method manual ipv4.addresses 10.0.0.100/24
#新增從屬介面
nmcli con add type bond-slave ifname ens7 master bond0
nmcli con add type bond-slave ifname ens3 master bond0
#注:如無為從屬介面提供連線名,則該名稱是介面名稱加型別構成
#要啟動繫結,則必須首先啟動從屬介面
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
#啟動繫結
nmcli con up mybond0
網路組:是將多個網路卡聚合在一起方法,從而實現冗錯和提高吞吐量
網路組不同於舊版中bonding技術,提供更好的效能和擴充套件性
網路組由核心驅動和teamd守護行程實現
網路組介面:邏輯合成的介面
port介面:物理網路卡
多種方式 runner
broadcast:廣播
roundrobin:輪詢
activebackup:主備
loadbalance:負載均衡
lacp (implements the 802.3ad Link Aggregation Control Protocol)
nmcli con add type team con-name myteam0 ifname team0 config '{"runner":{"name": "loadbalance"}}' ipv4.addresses 192.168.1.100/24 ipv4.method manual
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
# nmcli con up myteam0 可省,下面開啟port介面會自動將網路組介面開啟
nmcli con up team0-eth1
nmcli con up team0-eth2
命令設定完成之後會自動在/etc/sysconfig/network-scripts/目錄下生成相關的組態檔。
#網路組介面組態檔
/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.16.0.100
PREFIX0=24
NAME=team0
ONBOOT=yes
#port口組態檔
/etc/sysconfig/network-scripts/ifcfg-team0-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBOOT=yes
刪除網路組:
nmcli connection down team0
teamdctl team0 state
nmcli connection delete myteam0
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
nmcli connection
虛擬的類似交換機的東西,能夠將多個網路卡介面連線,使其劃分一個獨立的網路。相互通訊相互隔離。
設定網橋:工具包:bridge-utils,目前Centos8無此包
伺服器建立網路卡設定
brctl show
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
ip link set br0 up
brctl還支援stp的功能
brctl stp br0 on #開啟STP
刪除br0
brctl delif br0 eth0
brctl delif br0 eth1
ip link set br0 down
brctl delbr br0
brctl show
nmcli命令建立網橋
nmcli connection add type bridge con-name br0 ifname br0 ipv4.method manual
nmcli connection add type bridge-slave con-name br0-eth0 ifname eth0 master br0
nmcli connection add type bridge-slave con-name br0-eth1 ifname eth1 master br0
nmcli connection up br0
nmcli connection up eth0
nmcli connection up eth1
/etc/sysconfig/network-scripts/ifcfg-eth0
說明參考:
/usr/share/doc/initcripts-*/sysconfig.txt
cat !$
DEVICE #關聯的裝置名稱,要與檔名的後半部分eth0一定要保持一致。
BOOTPROTO={static|none|dhcp|bootp} #引導協定,使用靜態地址,使用static或none。dhcp表示使用dhcp獲取地址。bootp為dhcp的前身
IPADDR=: #IP地址
NETMASK=: #子網掩碼
GATEWAY= #預設閘道器
ONBOOT={yes|no} #開機時是否自動啟用此網路介面
HWADDR=: #硬體地址,要與硬體中的地址保持一致,可以省略。
USERCTL={yes|no} #是否允許普通使用者控制此介面的啟用和禁用。
PEERDNS={yes|no} #是否在BOOTPROTO為dhcp時接受由dhcp伺服器指定的DNS地址。
ONPARENT=yes #(啟用網路卡別名)
DNS1= #DNS伺服器地址
DNS2=
DOMAIN #主機不完整時,自動搜尋的域名字尾
NM_CONTROLLED #NM是NetworkManager的簡寫,此網路卡是否接受NM控制
不會立即生效,但重新啟動網路服務或主機都會生效。
centos7及一下使用service network restart
重新啟動
centos8使用
nmcli connection reload
nmcli connection eth0 down/up
/etc/hosts
/etc/resolv.conf
nameserver DNS1IP
nameserver DNS2IP
nameserver DNS3IP
網路卡組態檔中設定的DNS地址,在使其生效時會覆蓋到該檔案中。
該檔案改完之後立即生效
/etc/nsswitch.conf
hosts: files dns
/etc/sysconfig/network-scripts/route-IFACE
在這個目錄下建立檔案route-IFACE
兩種風格:
新增格式一為:
目的網段 via 下一跳
192.168.1.0/24 via 10.10.10.254
新增格式二:
ADDRESS0=192.168.1.0
NETMASK0=255.255.255.0
GATEWAY0=10.10.10.254
ADDRESS1=
NETMASK1=
GATEWAY1=
永久有效
centos7和6還可以通過 /etc/sysconfig/static-routes檔案新增持久靜態路由
#可以看到centos7系統啟動指令碼中獲取路由的指令碼
[root@centos7 ~]#grep -A 3 "/etc/sysconfig/static-routes" /etc/init.d/network
# Add non interface-specific static-routes.
if [ -f /etc/sysconfig/static-routes ]; then
if [ -x /sbin/route ]; then
grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
/sbin/route add -$args
done
else
# 檢視當前路由
[root@centos7 ~]#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
#建立檔案
[root@centos7 ~]#vim /etc/sysconfig/static-routes
[root@centos7 ~]#cat /etc/sysconfig/static-routes
any net 192.168.1.0/24 gw 10.0.0.254
any net 192.168.2.0/24 gw 10.0.0.254
[root@centos7 ~]#systemctl restart network
#確認路由生效
[root@centos7 ~]#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.1.0 10.0.0.254 255.255.255.0 UG 0 0 0 eth0
192.168.2.0 10.0.0.254 255.255.255.0 UG 0 0 0 eth0
將多個IP地址繫結到一個NIC上
每個IP繫結到獨立邏輯網路卡,即網路別名,命名格式: ethX:Y,如:eth0:1 、eth0:2、eth0:3
範例:ifconfig 命令
ifconfig eth0:0 192.168.1.100/24 up
ifconfig eth0:0 down
範例:ip 命令
ip addr add 172.16.1.1/16 dev eth0
ip addr add 172.16.1.2/16 dev eth0 label eth0:0
ip addr del 172.16.1.2/16 dev eth0 label eth0:0
ip addr flush dev eth0 label eth0:0
為每個裝置別名生成獨立的介面組態檔,格式為:ifcfg-ethX:xxx
範例:
[root@centos8 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
IPADDR=10.0.0.100
PREFIX=8
[root@maple-c8 ~]# nmcli connection reload
[root@maple-c8 ~]# nmcli connection down eth0
[root@maple-c8 ~]# nmcli connection up eth0
[root@centos8 ~]#ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe09:f5b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:09:0f:5b txqueuelen 1000 (Ethernet)
RX packets 2320 bytes 200266 (195.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1891 bytes 279736 (273.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.0.0.0 broadcast 10.255.255.255
ether 00:0c:29:09:0f:5b txqueuelen 1000 (Ethernet)
注意:
建議 CentOS 6 關閉 NetworkManager 服務
網路卡別名必須使用靜態地址
將多塊網路卡繫結同一IP地址對外提供服務,可以實現高可用或者負載均衡。直接給兩塊網路卡設定同一IP
地址是不可以的。通過 bonding,虛擬一塊網路卡對外提供連線,物理網路卡的被修改為相同的MAC地址
bond聚合鏈路模式共7種模式:0-6 Mode
mod=0 ,即:(balance-rr) Round-robin policy(輪詢)聚合口資料包文按包輪詢從物理介面轉發。
負載均衡—所有鏈路處於負載均衡狀態,輪詢方式往每條鏈路傳送報文這模式的特點增加了頻寬,同時支援容錯能力,當有鏈路出問題,會把流量切換到正常的鏈路上。
效能問題—一個連線或者對談的封包如果從不同的介面發出的話,中途再經過不同的鏈路,在使用者端很有可能會出現封包無序到達的問題,而無序到達的封包需要重新要求被傳送,這樣網路的吞吐量就會下降。Bond0在大壓力的網路傳輸下,效能增長的並不是很理想。
需要交換機進行埠繫結
mod=1,即: (active-backup) Active-backup policy(主-備份策略)只有Active狀態的物理介面才轉發資料包文。
容錯能力—只有一個slave是啟用的(active)。也就是說同一時刻只有一個網路卡處於工作狀態,其他的slave都處於備份狀態,只有在當前啟用的slave故障後才有可能會變為啟用的(active)。
無負載均衡—此演演算法的優點是可以提供高網路連線的可用性,但是它的資源利用率較低,只有一個介面處於工作狀態,在有 N 個網路介面的情況下,資源利用率為1/N。
mod=2,即:(balance-xor) XOR policy(平衡策略)聚合口資料包文按源目MAC、源目IP、源目埠進行互斥或HASH運算得到一個值,根據該值查詢介面轉發資料包文
負載均衡—基於指定的傳輸HASH策略傳輸封包。
容錯能力—這模式的特點增加了頻寬,同時支援容錯能力,當有鏈路出問題,會把流量切換到正常的鏈路上。
需要交換機設定為port channel
mod=3,即:broadcast(廣播策略)這種模式的特點是一個報文會複製兩份往bond下的兩個介面分別傳送出去,當有對端交換機失效,感覺不到任何downtime,但此法過於浪費資源;不過這種模式有很好的容錯機制。此模式適用於金融行業,因為他們需要高可靠性的網路,不允許出現任何問題。
mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 動態連結聚
合)在動態聚合模式下,聚合組內的成員埠上均啟用LACP(鏈路匯聚控制協定)協定,其埠狀態通過該協定自動進行維護。
負載均衡—基於指定的傳輸HASH策略傳輸封包。預設演演算法與blance-xor一樣。
容錯能力—這模式的特點增加了頻寬,同時支援容錯能力,當有鏈路出問題,會把流量切換到正常的鏈路上。對比blance-xor,這種模式定期傳送LACPDU報文維護鏈路聚合狀態,保證鏈路品質。
需要交換機支援LACP協定
mod=5,即:(balance-tlb) Adaptive transmit load balancing(介面卡傳輸負載均衡)
在每個物理介面上根據當前的負載(根據速度計算)分配外出流量。如果正在接收資料的物理介面口出故障了,另一個物理介面接管該故障物理口的MAC地址。
需要ethtool支援獲取每個slave的速率
mod=6,即:(balance-alb) Adaptive load balancing(介面卡適應性負載均衡)
該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡,而且不需要任何
switch(交換機)的支援。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機傳送的ARP應答,並把源硬體地址改寫為bond中某個物理介面的唯一硬體地址,從而使得不同的對端使用不同的硬體地址進行通訊。
mod=6與mod=0的區別:mod=6,先把eth0流量佔滿,再佔eth1,….ethX;而mod=0的話,會發現2個口的流量都很穩定,基本一樣的頻寬。而mod=6,會發現第一個口流量很高,第2個口只佔了小部分流量
說明:
常用的模式為 0,1,3,6
mode 1、5、6 不需要交換機設定
mode 0、2、3、4需要交換機設定
active-backup、balance-tlb 和 balance-alb 模式不需要交換機的任何特殊設定。其他繫結模式需
要設定交換機以便整合連結。如:Cisco 交換機需要在模式 0、2 和 3 中使用 EtherChannel,但在模
式4中需要 LACP和 EtherChannel
詳細幫助
/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
https://www.kernel.org/doc/Documentation/networking/bonding.txt
建立bonding裝置的組態檔
/etc/sysconfig/network-scripts/ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.0.0.100
PREFIX=8
#miimon指定鏈路監測時間間隔。如果miimon=100,那麼系統每100ms 監測一次鏈路連線狀態,如果有一
條線路不通就轉入另一條線路
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
/etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
/etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
檢視bond0狀態
/proc/net/bonding/bond0
刪除bond0
ifconfig bond0 down
rmmod bonding
ubuntu修改網路卡名稱:
#修改組態檔為下面形式
root@ubuntu1804:~#vi /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0"
#或者sed修改
root@ubuntu1804:~# sed -i.bak '/^GRUB_CMDLINE_LINUX=/s#"$#net.ifnames=0"#' /etc/default/grub
root@maple-u18:~# grub-mkconfig -o /boot/grub/grub.cfg ;reboot
ubuntu在18.04版本中的網路設定已經由
/etc/network/interfaces 換成了/etc/netplan/*.yaml組態檔了。
網路卡組態檔採用YAML格式,必須以 /etc/netplan/XXX.yaml 檔案命名方式存放
yml字尾不可以。
可以每個網路卡對應一個單獨的組態檔,也可以將所有網路卡都放在一個組態檔裡
root@ubuntu1804:~# vim /etc/network/interfaces
# ifupdown has been replaced by netplan(5) on this system. See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
# sudo apt install ifupdown
範例
vim /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses: [10.0.0.151/24,1.1.1.1/32] #和下面方式不能混合用
- 10.0.0.151/24
- 1.1.1.1/32
nameservers:
search: [maple.com,maple.org]
addresses:
- 114.114.114.114
- 8.8.8.8
gateway4: 10.0.0.2
注意:地址一項必須加中括號,即使只有一個地址。
生效:
netplan apply #載入網路卡組態檔
ip a #檢視地址是否生效
route -n #檢視閘道器是否生效
cat /etc/resolv.conf #僅有search加到組態檔中了,dns沒看到。
ll /etc/resolv.conf #可以看到在ubuntu中resolv檔案由systemd統一管理了。
systemd-resolv --status #可以看到設定的DNS,
# resolvectl status Ubuntu 20.04新命令
search的作用:
當只ping主機名時,自動補全後面的域名。
例:網路卡組態檔裡已經設定了search
vim /etc/host
127.0.0.1 localhost www.maple.com
root@ubuntu1804:/etc/netplan# ping www
PING www.maple.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.009 ms
vim /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
mv eth0.yaml netcfg.yaml
vim netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses:
- 10.0.0.151/24
- 1.1.1.1/32
nameservers:
search: [maple.com,maple.org]
addresses:
- 114.114.114.114
- 8.8.8.8
gateway4: 10.0.0.2
eth1:
dhcp4: no
dhcp6: no
addresses: [10.20.0.100/24]
nameservers:
addresses: [223.6.6.6]
routes:
- to: 10.30.0.0/24 #去往該網段的路由
via: 10.20.0.1 #下一跳為10.20.0.1
- to: 10.40.0.0/24
via: 10.20.0.1
- to: 10.50.0.0/24
via: 10.20.0.1
- to: 10.60.0.0/24
via: 10.20.0.1
73 history
root@ubuntu1804:/etc/netplan# !70
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:ad:3d:7d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.151/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 1.1.1.1/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fead:3d7d/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:ad:3d:87 brd ff:ff:ff:ff:ff:ff
inet 10.20.0.100/24 brd 10.20.0.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fead:3d87/64 scope link
valid_lft forever preferred_lft forever
root@ubuntu1804:/etc/netplan# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.20.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.30.0.0 10.20.0.1 255.255.255.0 UG 0 0 0 eth1
10.40.0.0 10.20.0.1 255.255.255.0 UG 0 0 0 eth1
10.50.0.0 10.20.0.1 255.255.255.0 UG 0 0 0 eth1
10.60.0.0 10.20.0.1 255.255.255.0 UG 0 0 0 eth1
三個網路卡在一個組態檔裡
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
eth1:
dhcp4: no
dhcp6: no
eth2:
dhcp4: no
dhcp6: no
bridges:
br0:
dhcp4: no
dhcp6: no
addresses: [10.0.0.161/24]
nameservers:
addresses: [114.114.114.114,8.8.8.8]
gateway4: 10.0.0.2
interfaces:
- eth1
- eth2
也可以一個網路卡一個組態檔,網橋設定單獨抽離出組態檔
netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
br0.yaml
network:
version: 2
renderer: networkd
ethernets:
eth1:
dhcp4: no
dhcp6: no
eth2:
dhcp4: no
dhcp6: no
bridges:
br0:
dhcp4: no
dhcp6: no
addresses: [10.0.0.161/24]
nameservers:
addresses: [114.114.114.114,8.8.8.8]
gateway4: 10.0.0.2
interfaces:
- eth1
- eth2
root@ubuntu1804:/etc/netplan# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:ad:3d:7d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.151/24 brd 10.0.0.255 scope global dynamic eth0
valid_lft 1634sec preferred_lft 1634sec
inet6 fe80::20c:29ff:fead:3d7d/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 00:0c:29:ad:3d:87 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 00:0c:29:ad:3d:91 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 82:0c:13:fb:65:26 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.161/24 brd 10.0.0.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::800c:13ff:fefb:6526/64 scope link
valid_lft forever preferred_lft forever
br0將eth1和eth2連線到自身,和eth1和eth2網路在同一網段的能夠相互通訊,
我這裡的IP分配的稍微有問題,eth0的dhcp地址池分配的ip也是10網段的了,導致路由表裡面有10網段的路由有兩條記錄
並且我宿主機10.0.0.1ssh連不上 10.0.0.151eth0介面了。
在主機裡面加一條主機路由到宿主機即可ssh
route add -host 10.0.0.1/32 dev eth0
設定多網橋同樣設定,在bridges下加個br1即可。
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
eth1:
dhcp4: no
dhcp6: no
bonds:
bond0:
interfaces:
- eth0
- eth1
addresses: [10.0.0.151/24]
gateway4: 10.0.0.2
nameservers:
addresses: [223.6.6.6,114.114.114.114]
parameters:
mode: active-backup
mii-monitor-interval: 100
ping測試,當斷掉其中一個網路卡時,能夠正常ping通,當兩個網路卡都斷掉之後,網路斷開。重新接入網路卡,網路恢復正常
將做了網路卡繫結的bond在橋接在網橋上。
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
eth1:
dhcp4: no
dhcp6: no
bonds:
bond0:
interfaces:
- eth0
- eth1
parameters:
mode: active-backup
mii-monitor-interval: 100
bridges:
br0:
addresses: [10.0.0.151/24]
gateway4: 10.0.0.2
nameservers:
addresses: [223.6.6.6,114.114.114.114]
interfaces:
- bond0
root@ubuntu1804:/etc/netplan# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 br0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
root@ubuntu1804:/etc/netplan# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
link/ether 2a:9d:8d:39:0d:c3 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
link/ether 2a:9d:8d:39:0d:c3 brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
link/ether 2a:9d:8d:39:0d:c3 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 82:0c:13:fb:65:26 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.151/24 brd 10.0.0.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::800c:13ff:fefb:6526/64 scope link
valid_lft forever preferred_lft forever
網路卡的多組繫結:同理,設定多個bond,每個bond繫結多個網路卡
多網路卡繫結+多橋接:將多個bond根據業務需求接到不同的網橋,實現業務互通和隔離。