虚机安装Linux网络配置(原创)
我的需求:
记得最开始学Linux的时候,使用VM虚拟机安装,配置网络,希望可以和主机互通,同时希望可以访问外网,改配置文件,照着网上的博客,改了又改,捣鼓了好几天也弄不好。
我需要解决的问题:
后来工作了慢慢会了,而且网络的管理工具也变了,对于centos来讲,network.service变成了NetworkManager.service,配置方式更多的是通过命令,或者UI界面的方式去配置,一般不去修改配置文件了,这里和小伙伴讲解一下linux的网络配置,希望小伙伴们学的时候不会乱糟糟的改配置文件,同时对于虚拟网络类型有个大概的了解。
我是这样做的:
我们这里使用的linux的版本为 Centos 7 ,本文主要讲解:
Linu虚拟网络配置的常用方式Linxu常用的网络配置命令一个成熟的人没有任何职责,除了这个:寻找自己,坚定地成为自己,不论走向何方,都往前探索自己的路。——赫尔曼·黑塞《德米安》
一、Linu虚拟网络配置的常用方式
1、桥接模式
1、为什么要叫桥接模式?
关于桥接模式,是设计模式的一种,了解过设计模式的小伙伴应该不陌生,这里简单回忆下,没有了解得直接忽略,不重要。
桥接模式,桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦,我们看一个java的Demo
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060218170570173833017.png)
使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆
创建桥接实现接口DrawAPI.java
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
创建实现了 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
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
创建实现了 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
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通.
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060218170570173865925.png)
在实际的工作中,我们需要一个交换机可以完成这样的需求,VM的桥接模式帮我们虚拟了一个交换机,配置桥接模式后,我们虚机和真机就位于一个网段内,且掩码相同,彼此可以ping通。
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060219170570173958627.png)
虚机网卡 与 真机网卡 通过桥接实现;桥接物理网卡,相当于直连到 真机 所在网络;配置桥接模式后:
真机网卡信息,使用的无线网卡,ip为192.168.1.4
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060219170570173966775.png)
虚机网卡信息,linux网关查看, 、 可以看出虚机的网络ip为:192.168.1.10
┌──[rootmaster]-[~如果您遇到问题,建议参考这些文章,同时也可以在论坛或社区中寻求帮助。通过这些教程,您可以更好地理解路由器和Wi-Fi网络,更好地保护您的网络和设备。]
└─$ ifconfig ens33 | head -2
ens33: flags=4163
在它显示的信息中,如果标志是 U,则说明是可达路由(活动的);如果是 G,则说明这个网络接口连接的是网关,H则说明目标是一个主机。
3. 桥接模式如何配置:
说了这么多,来具体操作一下,桥接模式到底要怎么配置:
&&&&&&&&&&&&&&&&&&配置网络步骤&&&&&&&&&&&&&&&&&&
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060219170570173955601.png)
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060220170570174058235.png)
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060220170570174041450.png)
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060221170570174173646.png)
桥接模式下,要自己选择桥接到哪个网卡(实际联网用的网卡),然后确认
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060221170570174167436.png)
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060222170570174260741.png)
配置网卡为DHCP模式(自动分配IP地址):执行方式见表尾,这里值得一说的是,如果网络换了,那么所以有的节点ip也会换掉,因为是动态的,但是还是在一个网段内。DNS和SSH免密也都不能用了,需要重新配置,但是如果你只连一个网络,那就没影响。
nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes #将网卡改为DHCP模式(动态分配IP),nmcli connection up 'ens33'
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060222170570174226031.png)
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060222170570174276175.png)
配置网卡为DHCP模式(自动分配IP地址)
┌──[rootlocalhost.localdomain]-[~]
└─$ nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes
┌──[rootlocalhost.localdomain]-[~]
└─$ nmcli connection up 'ens33'
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
┌──[rootlocalhost.localdomain]-[~]
└─$ ifconfig | head -2
ens33: flags=4163
┌──[root192.168.1.7]-[~]
└─$ ifconfig
ens33: flags=4163
当然,桥接模式特别方便,但是也有一个弊端,就是当更换网络时,ip都会变化,关于这一点,我们可以使用NAT模式,这个我们最后讲。
2、隔离模式
1、什么是隔离模式,隔离模式能做什么
关于隔离模式,顾名思义,就是虚机可以ping通真机上地上的其他虚机,也可以ping通真机,但是不能ping通外网。
这里如果小伙使用vm虚拟机,那么在装好系统以后会自动生成两个虚拟网卡,vmnet1和vmnet8
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060223170570174382312.png)
我们可以使用vmnet1或者vmnet8虚拟网卡来实现隔离模式的网络配置。
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060223170570174361346.png)
2、如何配置隔离模式
下面和小伙伴分享隔离模式如何配置
在这里我们使用vmnet1 配置网络,配置虚拟网卡
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060223170570174328119.png)
设置网络为vmnet1
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060224170570174418661.png)
nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes,nmcli connection up 'ens33',这里使用静态的也可以,一般也是设置成静态,这里为了方便.
静态配置方式,注意ip和掩码 nmcli connection modify 'ens33' ipv4.method manual ipv4.addresses 192.168.4.12/24 connection.autoconnect yes,nmcli connection up 'ens33'
到这里我们已经基于隔离模式配置好了网络,虚机看看网卡信息,测试一下
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060224170570174421949.png)
这里如果不通的话,需要关闭真机的防火墙试试
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060224170570174438003.png)
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060225170570174522915.png)
嗯,然后做真机测试一下
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060225170570174517393.png)
虚机网卡配置
──[rootmaster]-[~]
└─$ nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes
┌──[rootmaster]-[~]
└─$ nmcli connection up 'ens33'
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/8)
┌──[rootmaster]-[~]
└─$ ip a
1: lo:
3、NAT模式
1、什么是NAT模式,NAT模式能做什么
NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网.
在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。这里的VMware Network Adapter VMnet8虚拟网卡主要是为了实现主机与虚拟机之间的通信
使用NAT模式,可以实现上面桥接模式的功能,同时又不需要考虑IP的问题
2、NAT模式的配置
配置真机vm8网卡,添加ip,用于和虚机通信
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060226170570174664451.png)
配置虚机为NAT模式,添加子网IP
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060226170570174695284.png)
配置虚机IP
![](https://www.shoulian.org/luyou/zb_users/upload/2024/01/20240120060226170570174667119.png)
然后启动虚机,配置ip这里我们写了一个脚本配置,直接 运行脚本 + ip最后一位。
#!/bin/bash
if [ $# -eq 0 ]; then
echo "usage: `basename $0` num"
exit 1
fi
[[ $1 =~ ^[0-9]+$ ]]
if [ $? -ne 0 ]; then
echo "usage: `basename $0` 10~240"
exit 1
fi
cat > /etc/sysconfig/network-scripts/ifcfg-ens32 <
┌──[rootliruilongs.github.io]-[~]
└─$ ifconfig ens32
ens32: flags=4163
二、linxu常用的网络配置命令
1、配置静态主机名
linux主机名的配置在配置文件 /etc/hostname 这里需要注意的是 一般的命里提示服配置的都是-h即短的主机名,只会显示·前面的部分,要想全部显示,需要修改为-H
E:\docker>ssh root39.97.241.18
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.
[rootliruilong ~]# echo liruilongs.github.io > /etc/hostname
[rootliruilong ~]# cat /etc/hostname
liruilongs.github.io
[rootliruilong ~]#
[rootliruilong ~]# echo liruilongs.github.io > /etc/hostname #重定向将主机名写入配置文件,重启系统后才会生效
[rootliruilong ~]# cat /etc/hostname #查看配置文件
liruilongs.github.io
##临时设置的主机名,重新开一个终端即可生效 Ctrl + Shift + T
[rootliruilong ~]# hostname liruilongs.github.io #临时设置主机名
[rootliruilong ~]# hostname #查看当前系统的主机名
liruilongs.github.io
[rootliruilong ~]#
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 服务
[rootliruilong ~]# nmcli connection show
Error: NetworkManager is not running.
[rootliruilong ~]# systemctl start NetworkManager
[rootliruilong ~]# 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]:
1、查看网络连接
使用 show 指令
nmcli connection shownmcli connection show "连接名"[rootliruilong ~]# nmcli connection show #显示网卡设备
[rootliruilong ~]# ifconfig | head -3 #查看网卡信息
[rootliruilong ~]# nmcli connection show ens33 #查看网卡的详细信息
[rootliruilong ~]# 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
[rootliruilong ~]# ifconfig | head -3
br-3e7fae020360: flags=4099
2、修改网络连接配置
使用 modify 指令
nmcli connection modify "连接名" 参数1 值1 ....
#常用参数:
ipv4.method auo|manual
ipv4.addresses “IP地址/掩码长度”
ipv4.gateway 网关地址
connection.autoconnect yes | no
#给网卡ens33配置ip地址,子网掩码,网关,并配置开机自启动
[rootliruilong ~]# nmcli connection modify 'ens33' ipv4.method manual
ipv4.addresses 192.168.4.7/24 ipv4.gateway 192.168.4.254 connection.autoconnect
yes
[rootliruilong ~]# nmcli connection up 'ens33' #激活网卡
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[rootliruilong ~]# ifconfig | head -3 #查看网卡配置信息
ens33: flags=4163
3、激活/禁用网络连接
[rootliruilong ~]# nmcli connection up "ens33" #激活网卡ens33
[rootliruilong ~]# nmcli connection down "ens33" #取消激活网卡ens33
3.为本机指定 DNS 服务器
在配置文件配置,有时间小伙访问ip能够访问,但是访问域名却出了问题,这有可能是 DNS的问题,无法解析域名。
配置DNS服务器 在配置文件 /etc/resolv.conf 中,配置方式为nameserver DNS服务器地址
[rootliruilong ~]# vim /etc/resolv.conf
nameserver 172.25.254.254 #设置DNS服务器地址
[rootliruilong ~]# echo nameserver 192.168.4.7 > /etc/resolv.conf
[rootliruilong ~]# cat /etc/resolv.conf
nameserver 192.168.4.7
network.service 的配置方式
[rootlocalhost ~]# 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"
[rootroom9pc01 ~]# systemctl restart network #重启网络
后记
关于linux的网络配置就讲到这里,当然,还有其他的配置方式,我们这里没有讲到,感兴趣的小伙伴赶快尝试吧
~