我的需求:
記得最開始學Linux的時候,使用VM虛拟機安裝,配置網絡,希望可以和主機互通,同時希望可以通路外網,改配置檔案,照着網上的部落格,改了又改,搗鼓了好幾天也弄不好。
我需要解決的問題:
後來工作了慢慢會了,而且網絡的管理工具也變了,對于centos來講,
network.service
變成了
NetworkManager.service
,配置方式更多的是通過指令,或者UI界面的方式去配置,一般不去修改配置檔案了,這裡和小夥伴講解一下
linux的網絡配置
,希望小夥伴們學的時候不會亂糟糟的改配置檔案,同時對于
虛拟網絡類型
有個大概的了解。
我是這樣做的:
我們這裡使用的linux的版本為 Centos 7 ,博文主要講解:
- Linu虛拟網絡配置的常用方
- Linxu常用的網絡配置指令
一個成熟的人沒有任何職責,除了這個:尋找自己,堅定地成為自己,不論走向何方,都往前探索自己的路。——赫爾曼·黑塞《德米安》
*
一、Linu虛拟網絡配置的常用方式
1、橋接模式
1、為什麼要叫橋接模式?
關于橋接模式,是設計模式的一種,了解過設計模式的小夥伴應該不陌生,這裡簡單回憶下,沒有了解的直接忽略,不重要。
橋接模式,橋接(Bridge)是用于把 ,使得二者可以獨立變化。 ,來實作二者的解耦,我們看一個java的Demo |
---|
![]() |
使用相同的抽象類方法但是不同的橋接實作類,來畫出不同顔色的圓 |
建立橋接實作接口DrawAPI.java
建立橋接實作接口DrawAPI.java
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
建立實作了 DrawAPI 接口的實體橋接實作類。RedCircle.java,GreenCircle.java
建立實作了 DrawAPI 接口的實體橋接實作類。RedCircle.java,GreenCircle.java
public class RedCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: red, radius: "
+ radius +", x: " +x+", "+ y +"]");
}
}
public class GreenCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: green, radius: "
+ radius +", x: " +x+", "+ y +"]");
}
}
使用 DrawAPI 接口建立抽象類 Shape。Shape.java
使用 DrawAPI 接口建立抽象類 Shape。Shape.java
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
建立實作了 Shape 抽象類的實體類。Circle.java
建立實作了 Shape 抽象類的實體類。Circle.java
public class Circle extends Shape {
private int x, y, radius;
public Circle(int x, int y, int radius, DrawAPI drawAPI) {
super(drawAPI);
this.x = x;
this.y = y;
this.radius = radius;
}
public void draw() {
drawAPI.drawCircle(radius,x,y);
}
}
使用 Shape 和 DrawAPI 類畫出不同顔色的圓。BridgePatternDemo.java
使用 Shape 和 DrawAPI 類畫出不同顔色的圓。BridgePatternDemo.java
public class BridgePatternDemo {
public static void main(String[] args) {
Shape redCircle = new Circle(100,100, 10, new RedCircle());
Shape greenCircle = new Circle(100,100, 10, new GreenCircle());
redCircle.draw();
greenCircle.draw();
}
}
類比
虛拟機網絡連接配接
這一塊,linux系統聯網是一個抽象行為,他需要網卡才可以和外部連接配接,那麼網卡就是他的一個橋接接口,我們通過網卡的實作類來實作網絡的互通,這裡我們有兩種網卡,真機的實體網卡, 虛機的虛拟網卡,是以有兩個橋接實作類,通過橋接模式,我們解耦了聯網這種抽象行為和具體網卡的聯網實作。
2、橋接模式可以做什麼
下面回到正題,我們要通過橋接模式,實作這樣一個場景,就那我們常用的筆記本來說,我要通過筆記本上的無線網卡連接配接公網,然後通過虛機配置橋接模式,實作我的虛機可以
ping通真機,也可以ping通公網,同時多個虛機可以ping通
.
在實際的工作中,我們需要一個
交換機
可以完成這樣的需求,
VM的橋接模式幫我們虛拟了一個交換機
,配置橋接模式後,我們虛機和真機就位于一個網段内,且掩碼相同,彼此可以ping通。
虛機網卡 與 真機網卡 通過橋接實作;橋接實體網卡,相當于直連到 真機 所在網絡;配置橋接模式後:
真機網卡資訊,使用的無線網卡,ip為192.168.1.4
虛機網卡資訊,linux網關檢視, 、 可以看出虛機的網絡ip為:192.168.1.10
┌──[root@master]-[~]
└─$ ifconfig ens33 | head -2
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
┌──[root@master]-[~]
└─$ route -n | grep ens33
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 ens33
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
┌──[root@master]-[~]
└─$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 ens33
10.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 flannel.1
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
┌──[root@master]-[~]
└─$
- 網關第一行的意思就是去往所有目标位址資料包由網關192.168.1.1 通過網卡ens33來轉發;0.0.0.0代表的是比對所有目标位址
- 網關第二行:意思就是去往10.254.0.0 位址的資料包通過flannel.1網橋裝置來轉發
在它顯示的資訊中,如果标志是 U,則說明是可達路由(活動的);如果是 G,則說明這個網絡接口連接配接的是網關,H則說明目标是一個主機。
3. 橋接模式如何配置:
說了這麼多,來具體操作一下,橋接模式到底要怎麼配置:
&&&&&&&&&&&&&&&&&&配置網絡步驟&&&&&&&&&&&&&&&&&& |
---|
|
|
|
|
橋接模式下,要自己選擇橋接到哪個網卡(實際聯網用的網卡),然後确認 |
|
|
配置網卡為DHCP模式(自動配置設定IP位址):執行方式見表尾,這裡值得一說的是,如果網絡換了,那麼是以有的節點ip也會換掉,因為是動态的,但是還是在一個網段内。DNS和SSH免密也都不能用了,需要重新配置,但是如果你隻連一個網絡,那就沒影響。是以一般需要在配置設定IP之後,把IP擷取方式改成手動靜态IP。當然你可以直接設定手動,但是要避免IP沖突 |
, |
|
|
配置網卡為DHCP模式(自動配置設定IP位址)
┌──[[email protected]]-[~]
└─$ nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes
┌──[[email protected]]-[~]
└─$ nmcli connection up 'ens33'
連接配接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/4)
┌──[[email protected]]-[~]
└─$ ifconfig | head -2
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.7 netmask 255.255.255.0 broadcast 192.168.1.255
┌──[[email protected]]-[~]
└─$
┌──[[email protected]]-[~]
└─$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.7 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::8899:b0c7:4b50:73e0 prefixlen 64 scopeid 0x20<link>
inet6 240e:319:707:b800:2929:3ab2:f378:715a prefixlen 64 scopeid 0x0<global>
ether 00:0c:29:b6:a6:52 txqueuelen 1000 (Ethernet)
RX packets 535119 bytes 797946990 (760.9 MiB)
RX errors 0 dropped 96 overruns 0 frame 0
TX packets 59958 bytes 4119314 (3.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 616 bytes 53248 (52.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 616 bytes 53248 (52.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:2e:66:6d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
┌──[[email protected]]-[~]
└─$
配置網卡為手動擷取IP,即把DHCP配置設定的ip設定為靜态IP,這一步在機器克隆完成後中每個機器執行
nmcli connection modify 'ens33' ipv4.method manual ipv4.addresses 192.168.1.7/24 ipv4.gateway 192.168.1.1 connection.autoconnect yes
nmcli connection up 'ens33'
2、隔離模式
1、什麼是隔離模式,隔離模式能做什麼
關于隔離模式,顧名思義,就是虛機可以ping通真機上的上的其他虛機,也可以ping通真機,但是不能ping通外網。
這裡如果小夥使用vm虛拟機,那麼在裝好系統以後會自動生成兩個虛拟網卡,vmnet1和vmnet8 |
---|
|
我們可以使用vmnet1或者vmnet8虛拟網卡來實作隔離模式的網絡配置。 |
|
2、如何配置隔離模式
下面和小夥伴分享隔離模式如何配置 |
---|
這裡我們使用vmnet1 配置網絡,配置虛拟網卡 |
|
設定網絡為vmnet1 |
|
, ,這裡使用靜态的也可以,一般也是設定成靜态,這裡為了友善. |
靜态配置方式,注意ip和掩碼 |
到這裡我們已經基于隔離模式配置好了網網絡,虛機看看網卡資訊,測試一下 |
|
這裡如果不通的話,需要關閉真機的防火牆試試 |
|
|
嗯,然後做真機測試一下 |
|
虛機網卡配置
──[root@master]-[~]
└─$ nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes
┌──[root@master]-[~]
└─$ nmcli connection up 'ens33'
連接配接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/8)
┌──[root@master]-[~]
└─$ 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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5e:c9:7f brd ff:ff:ff:ff:ff:ff
inet 192.168.5.128/24 brd 192.168.5.255 scope global noprefixroute dynamic ens33
valid_lft 1798sec preferred_lft 1798sec
inet 192.168.0.106/32 brd 192.168.0.106 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::8899:b0c7:4b50:73e0/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:2e:66:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:2e:66:6d brd ff:ff:ff:ff:ff:ff
┌──[root@master]-[~]
└─$
┌──[root@master]-[~]
└─$
二、linxu常用的網絡配置指令
1、配置靜态主機名
linux主機名的配置在配置檔案 /etc/hostname 這裡需要注意的是 一般的命裡提示服配置的都是
-h
即短的主機名,隻會顯示
·
前面的部分,要想全部顯示,需要修改為
-H
E:\docker>ssh [email protected]
Last failed login: Thu Sep 16 19:46:40 CST 2021 from 47.106.250.53 on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Thu Sep 16 17:48:01 2021 from 121.57.15.165
Welcome to Alibaba Cloud Elastic Compute Service !
How would you spend your life?.I don't know, but I will cherish every minute to live.
[root@liruilong ~]# echo liruilongs.github.io > /etc/hostname
[root@liruilong ~]# cat /etc/hostname
liruilongs.github.io
[root@liruilong ~]#
[root@liruilong ~]# echo liruilongs.github.io > /etc/hostname #重定向将主機名寫入配置檔案,重新開機系統後才會生效
[root@liruilong ~]# cat /etc/hostname #檢視配置檔案
liruilongs.github.io
##臨時設定的主機名,重新開一個終端即可生效 Ctrl + Shift + T
[root@liruilong ~]# hostname liruilongs.github.io #臨時設定主機名
[root@liruilong ~]# hostname #檢視目前系統的主機名
liruilongs.github.io
[root@liruilong ~]#
2. NetworkManager
NetworkManager
主要管理2個對象:Connection(網卡連接配接配置) 和 Device(網卡裝置),他們之間是多對一的關系,但是同一時刻隻能有一個Connection對于Device才生效。這裡了解的話,我們要配置linux網絡的話,主要就是使用的這個配置的。
在 RHEL 8/Centos 8 有四種方法配置網絡:
- 通過
指令配置,會自動生成nmcli connection add
。我們上面用的就是這種。ifcfg檔案
- 手動配置
檔案,通過ifcfg
來加載生效。nmcli connection reload
-
檔案,通過傳統ifcfg
network.service
-
以圖形化的方式配置nmtui
啟動NetworkManager 服務
[root@liruilong ~]# nmcli connection show
Error: NetworkManager is not running.
[root@liruilong ~]# systemctl start NetworkManager
[root@liruilong ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2021-09-16 21:30:52 CST; 7s ago
Docs: man:NetworkManager(8)
Main PID: 997 (NetworkManager)
Tasks: 5
Memory: 12.0M
CGroup: /system.slice/NetworkManager.service
├─ 997 /usr/sbin/NetworkManager --no-daemon
└─1005 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/Ne...
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9624] dhcp4 (eth0): nameserver '1...138'
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9625] dhcp4 (eth0): state changed u...ound
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9635] device (eth0): state change: ...me')
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9646] device (eth0): state change: ...me')
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9648] device (eth0): state change: ...me')
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9651] manager: NetworkManager state...SITE
Sep 16 21:30:52 liruilongs.github.io dhclient[1005]: bound to 172.17.57.70 -- renewal in 154114011 seconds.
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9767] device (eth0): Activation: su...ted.
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9770] manager: NetworkManager state...OBAL
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info> [1631799052.9774] manager: startup complete
Hint: Some lines were ellipsized, use -l to show in full.
[root@liruilong ~]#
1、檢視網絡連接配接
使用 show 指令
-
nmcli connection show
-
nmcli connection show "連接配接名"
[root@liruilong ~]# nmcli connection show #顯示網卡裝置
[root@liruilong ~]# ifconfig | head -3 #檢視網卡資訊
[root@liruilong ~]# nmcli connection show ens33 #檢視網卡的詳細資訊
[root@liruilong ~]# nmcli connection show
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
br-3e7fae020360 9fbbc0c9-8da1-482e-b443-014900ac1ec0 bridge br-3e7fae020360
[root@liruilong ~]# ifconfig | head -3
br-3e7fae020360: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.19.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:65:a1:d1:61 txqueuelen 0 (Ethernet)
[root@liruilong ~]# nmcli connection show "System eth0"
connection.id: System eth0
connection.uuid: 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
connection.stable-id: --
connection.type: 802-3-ethernet
connection.interface-name: eth0
connection.autoconnect: yes
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)
connection.multi-connect: 0 (default)
connection.auth-retries: -1
。。。。。。。
2、修改網絡連接配接配置
使用 modify 指令
nmcli connection modify "連接配接名" 參數1 值1 ....
常用參數:
ipv4.method auo|manual
ipv4.addresses "IP位址/掩碼長度"
ipv4.gateway 網關位址
connection.autoconnect yes | no
#給網卡ens33配置ip位址,子網路遮罩,網關,并配置開機自啟動
[root@liruilong ~]# nmcli connection modify 'ens33' ipv4.method manual
ipv4.addresses 192.168.4.7/24 ipv4.gateway 192.168.4.254 connection.autoconnect
yes
[root@liruilong ~]# nmcli connection up 'ens33' #激活網卡
連接配接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@liruilong ~]# ifconfig | head -3 #檢視網卡配置資訊
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.7 netmask 255.255.255.0 broadcast 192.168.4.255
inet6 fe80::deea:10bb:4b70:a959 prefixlen 64 scopeid 0x20<link>
[root@liruilong ~]# route -n #檢視網關
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.4.254 0.0.0.0 UG 100 0 0 ens33
192.168.4.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
3、激活/禁用網絡連接配接
[root@liruilong ~]# nmcli connection up "ens33" #激活網卡ens33
[root@liruilong ~]# nmcli connection down "ens33" #取消激活網卡ens33
3.為本機指定 DNS 伺服器
在配置檔案配置,有時間小夥通路ip能夠通路,但是通路域名卻出了問題,這有可能是 DNS的問題,無法解析域名。
配置DNS伺服器 在配置檔案
/etc/resolv.conf
中,配置方式為
nameserver DNS伺服器位址
[root@liruilong ~]# vim /etc/resolv.conf
nameserver 172.25.254.254 #設定DNS伺服器位址
[root@liruilong ~]# echo nameserver 192.168.4.7 > /etc/resolv.conf
[root@liruilong ~]# cat /etc/resolv.conf
nameserver 192.168.4.7
network.service 的配置方式
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE="ens33" #驅動名稱,與ifconfig 看到的名稱一緻
ONBOOT="yes" #開機啟動
NM_CONTROLLED="yes" #接受 NetworkManager 控制
TYPE="Ethernet" #類型
BOOTPROTO="static" #協定(dhcp|static|none)
IPADDR="192.168.4.7" #IP位址
NETMASK="255.255.255.0" #子網路遮罩
GATEWAY="192.168.4.254" #預設網關
DNS1="8.8.8.8" #DNS位址為可選内容,主要用于連接配接外網
DNS2="8.8.4.4"
[root@room9pc01 ~]# systemctl restart network #重新開機網絡
後記
關于linux的網絡配置就講到這裡,當然,還有其他的配置方式,我們這裡沒有講到,感興趣的小夥伴趕快嘗試吧!