本篇博客将记录一下 Linux 系统下网络配置,会对 Linux 网络配置和基于 Linux 网络的负载均衡的配置介绍,如何在 Linux 系统下配置网络设置是一个极客程序员必须掌握的,如何配置 sshd 服务程序的知识和免密登录、创建虚拟网卡提高系统可靠性。


Network Manager

NetworkManager 软件工具的目标是降低在 Linux 与其他类 Unix 操作系统上的计算机网络使用难度,RedHat 在 2004 年发起了 NetworkManager 项目,其目标是让 Linux 用户能够更容易的处理现代的网络需求,特别是无线网络。

# 安装 NetWorkManager 软件包
dnf install NetworkManager -y
# 查看网卡信息
ifconfig
# 查看网卡状态
mii-tools ens160
# 查看网卡详细状态信息
ethtool ens160
# 给某块网卡启一个别名
ip addr 192.168.31.200/24 dev eth0 label eth0:1
# 命令行图像配置
nmtui

比较老的版本可以在 /etc/sysconfig/network-scripts/ 目录中,编写对应的网卡脚本文件,Linux 会根据文件内容来设置对应的网卡信息,一个简单模版:

# vim ifcfg-ens160 固定前缀 ifcfg- 后面为网卡名称
TYPE=Ethernet    # 网络类型
BOOTPROTO=static # 静态分配
NAME=eno16777736 # 网卡名称
ONBOOT=yes       # 是否自动启用该网络接口
IPADDR=192.168.10.10  # 分配的 IP
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.10.1  # 网关地址
DNS1=8.8.8.8          # DNS 地址
# 重启网络模块 systemctl restart network

以上为老版本系统所使用的方式,不再推荐使用! RHEL9 和 CentOS 9 Stream 默认使用了 NetworkManager 来管理网络,因此 systemctl restart network 命令已经不再被使用了,目前可以使用 nmcli 命令来管理网络连接,以下是一些常用的 nmcli 命令:

nmcli connection show:     # 显示所有的网络连接。
nmcli connection up         # [连接名称]:启用某个网络连接。
nmcli connection down       # [连接名称]:禁用某个网络连接。
nmcli device status         # 显示所有网络设备的状态。
nmcli device wifi list      # 列出所有可用的 Wi-Fi 热点。
nmcli connection add help   # 列出所有适用于 add 的参数信息

如果您需要修改网络连接的配置,可以使用以下命令:

nmcli connection modify [连接名称] [选项] [值]:修改连接的配置,例如 IP 地址、网关、DNS 等。

注意对于任何更改都要谨慎,以免影响系统的网络连接,最可怕是禁止使用网卡导致远程 SSH 连接断开。以下是一些常用的 nmcli connection modify 命令选项:

参数名称参数作用
ipv4.method设置 IPv4 的获取方式,可选值为 auto、manual、dhcp 或 shared。
ipv4.addresses设置 IPv4 地址,格式为 IP 地址/掩码,多个地址之间用逗号分隔。
ipv4.gateway设置 IPv4 网关地址。
ipv4.dns设置 IPv4 DNS 服务器地址,多个地址之间用逗号分隔。
ipv6.method设置 IPv6 的获取方式,可选值为 auto、manual 或 ignore。
ipv6.addresses设置 IPv6 地址,格式为 IP 地址/前缀长度,多个地址之间用逗号分隔。
ipv6.gateway设置 IPv6 网关地址。
ipv6.dns设置 IPv6 DNS 服务器地址,多个地址之间用逗号分隔。

例如要修改名为 eth0 的有线网络连接的 IPv4 地址为 192.168.1.2/24、网关为 192.168.1.1,DNS 服务器为 8.8.8.8 和 8.8.4.4,可以执行以下命令:

nmcli connection modify eth0 ipv4.addresses 192.168.1.2/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8,8.8.4.4"

nmctl 不仅可以配置网络参数,还可以基于现有多网卡设备创建新的网络会话连接,基于一张网卡创建一个新的网络环境,例如在公共场所使用一个网络会话,在家里用另外一个网络会话,配置参数如下:

参数说明
add添加网络会话
type网络类型
ifname网卡名称
con-name会话名称

例如使用 eth0 网卡创建一个名字为 house 网络会话:

sudo nmcli connection add type ethernet ifname eth0 con-name house

最后使用 nmcli 配置这个网络会话参数信息:

nmcli connection modify house ip.addresses 192.168.31.1/24 ip.dns "8.8.8.8"

如果需要给网卡进行起别名,假设想为 eth0 的网卡设置别名为 my-eth0 ,则可以按照以下步骤操作:

# 列出可用设备
nmcli device
# 给你网卡起别名
nmcli connection modfiy eth0 connection.id my-eth0
# 删除指定的网卡
nmcli connection delete my-eth0

以上是基本网络设备管理和网络设备配置基础,针对环境是物理网线环境,而某些设备采用的是 Wi-Fi 连接的网络的模式,上面的方式将不太适用了,使用下面命令进行配置扫描和连接配置:

# 扫描附近的 Wi-Fi
nmcli device wifi rescan
# 查看可用的 Wi-Fi 网络
nmcli device wifi list
# 连接到 Wi-Fi 网络
nmcli device wifi connect SSID password PASSWORD
# 端断开 Wi-Fi 网络
nmcli device disconnect wlan0

其他 DNS 和 IP 、网络 IP 获取模式可以通过和普通网桥连接到方式一致。


虚拟网卡

在生产环境大部分服务器都配置多张网卡,我们可以将多张网卡绑定成为一个张虚拟网卡,从而到达提高网络利用率和网络传输速度,更重要的功能是当其中一张物理网卡不能正常工作时,系统会自动切换到另外一张网卡进行工作,把多张网卡绑定成为一张虚拟网卡共用一个固定的 IP 地址。

例如创建名字为 bond0 的虚拟网卡,要求这张虚拟网卡必须由物理网卡 ens160 和 ens161 组合而成的,并且指定数据负载模式为轮询:

# 先创建虚拟网卡
nmcli connection add type bond ifname bond0 con-name bond0 bond.options "mode=0"
# 往虚拟网卡添加物理网卡
nmcli connection add type ethernet slave-type bond con-name b1 ifname ens160 master bond0
nmcli connection add type ethernet slave-type bond con-name b2 ifname ens161 master bond0

上面命令中的 connection 参数可简写为 con ,type 类型为 bond 为绑定模式,mode 模式也可以简写成为数字,其他参数在上面基础中已经说明了,mode 模式数字表示对应表为下:

数字说明
0balance-rr 默认轮询负载
1active-backup 故障自动转移
2balance-xor 基于MAC地址的负载均衡
3broadcast 数据包同时发送到所有从属接口上
4802.3ad 这个模式需要交换机支持802.3ad协议
5balance-tlb 发送数据包时进行负载均衡,接收数据包时不进行负载均衡
6balance-alb 与 5 类似同时也在接收数据包时进行负载均衡

配置完成之后,可以用两台在同一网段的电脑测试一下效果:

# 一直 ping 查看回包
ping xxx.xxx.xxx.xxx
# 关闭其中一个网卡
nmcli connection down b2

如果其中一张网卡关闭了,ping 还能正常响应说明配置正常。


SSH 连接

Secure Shell 是 SSH 的全称,这是一种安全的网络协议可以帮助远程登录管理 Linux 系统,传统方式采用的 FTP 上传文件不安全,后面出现了 SFTP 和 scp 命令进行传输文件;而早期的 Linux 管理采用的是 Telnet 协议进行连接,密码和账号都是明文存储的,从而出现了 SSH 协议和相关实现了 SSH 协议的软件,一般服务器端 Linux 默认都已经安装了 sshd 程序,如果没有安装可以执行下面命令:

# 安装 sshd 软件
sudo yum install openssh-server
# 设置开机自启动
systemctl enable sshd

最后如果是服务端需要配置一些 sshd 软件运行时的规则,默认的配置文件路径位 /etc/ssh/sshd_config 目录中,sshd 支持加密通信的协议,所以可以配置非对称加密使用的密钥对,配置模版如下:

# 端口号,如果不指定默认为 22
# Port 22

# 监听地址,如果不指定默认为所有接口
# ListenAddress 0.0.0.0

# 协议版本,可以指定多个,使用逗号分隔,如 "2,1"
Protocol 2

# 是否启用公钥验证
PubkeyAuthentication yes

# 是否允许密码验证
PasswordAuthentication no

# 是否允许 root 用户登录
PermitRootLogin yes

# 是否启用 ChallengeResponseAuthentication,即是否启用 PAM 验证
ChallengeResponseAuthentication yes

# 是否启用 GSSAPI 验证
GSSAPIAuthentication no

# 是否启用 X11 转发 将远程 GUI 程序显示到本地
# 登录时使用参数 -X ssh -X username@remote_host
X11Forwarding on

# 是否启用 TCP 端口转发
TCPKeepAlive yes

# 登录时最大重试次数
MaxAuthTries 3

# 最大同时连接数
MaxSessions 10

# 公钥路径
AuthorizedKeysFile      .ssh/authorized_keys

# 客户端连接时 banner 的显示内容
# 超级酷可以自定义 ssh 协议登录时的提示消息
# Banner /etc/issue.net

# 启用 Syslog 日志
SyslogFacility AUTH
LogLevel INFO

对应一般需求开启 root 登录工具将可以满足日常开发需求,如果想酷炫一点可以修改客户端连接时 banner 的显示内容,下面这样的:

# vim /etc/issue.net
 ██ ██                 ██
░██░██       ██   ██  ░██
░██░██      ░░██ ██  ██████  █████
░██░██████   ░░███  ░░░██░  ██░░░██
░██░██░░░██   ░██     ░██  ░███████
░██░██  ░██   ██      ░██  ░██░░░░
░██░██████   ██       ░░██ ░░██████
░░ ░░░░░    ░░         ░░   ░░░░░░
welcome to www.ibyte.me !

部分系统在 sshd 中设置 banner 可能不起作用,需要在 \etc\motd 文件中设置,例如:

             ,%%%%%%%%, 
           ,%%/\%%%%/\%% 
          ,%%%\c "" J/%%% 
 %.       %%%%/ o  o \%%% 
 `%%.     %%%%    _  |%%% 
  `%%     `%%%%(__Y__)%%' 
  //       ;%%%%`\-/%%%'
 ((       /  `%%%%%%%' 
  \\    .'          | 
   \\  /       \  | | 
    \\/         ) | | 
     \         /_ | |__ 
     (___________))))))) 一键3连!!更多技术干货 👉 https://ibyte.me

这样配置之后会在下次 SSH 登录系统时提示保存的内容。如果开启 X11 转发功能,默认可以将远程的 GUI 程序在本地计算机上显示会占用一些网络带宽,但是本地计算机需要安装一些支持 X11 的软件,Windows 上有 WinSCPXming,MacOS 有 XQuartz,不推荐使用这些还是推荐基于 VNC 协议的软件,Geek 应该直接敲命令才对。

基于 SSH 免密钥登录需要生产密钥对,最后将其公钥拷贝远程需要登录到服务器中实现免密登录,执行下面命令

# 生成密钥
ssh-keygen -t rsa -b 4096 -C "[email protected]"
# 拷贝密钥
ssh-copy-id xxx.xxx.xxx.xxx

光通过 ssh 协议来管理远程服务器功能还是比较单一不能传送文件,目前可以基于 SFTP 一些客户端来实现文件传输,命令行版本可以使用 scp 命令进行传输文件,例如下:

# 将某个目录传输到服务器 root 目录下
scp -r /xxx 192.168.31.10:/root 
# 下载某个目录文件
scp -r 192.168.31.10:/root/jdk /download

默认情况下不借助其他第三方 ssh 连接管理软件,可以使用 ssh 默认目录下编写配置文件来管理多个 ssh 连接,配置文件如下:

# 编辑 vim ~/.ssh/config
Host cs9
    HostName 172.16.19.128
    User root
    #Port 22
    #IdentityFile ~/.ssh/id_rsa_test

默认这种 ssh 会话连接方式在实际操作过程中可能会出现断开情况,不能正常回复会话,在执行某个命令时断开连接就不能继续执行任务,或者执行任务整理一个窗口不能做其他事情,解决这个问题可以使用 terminal multiplever 软件来管理多个 ssh 会话连接,基本的常用命令:

# 安装 terminal multiplexer
dnf insatll -y tmux
# 创建一个会话
tmux new -s backup
# 临时离开隐藏会话
tmux detach
# 查看当前 tmux 中会话
tmux ls
# 恢复之前保存会话
tmux attach -t backup
# 直接运行 shell 命令
tmux new "echo 'test text' > test.txt"
# 连接到被分享服务器会话中
tmux attach-session -t share

上面为基础会话管理命令,下面介绍如何在一个大屏幕上使用 tmux 开启多个小窗口执行更多任务,命令如下:

# 分裂出一个新查看,左右分割,默认上上下分割
tmux split-widnow -h
# 在多个窗口之间切换,向右切换 —R 向左切换 -L
tmux select-pane -R
# 上下切换窗口,向上切换 -U 向下切换 -D
tmux selelct-pane -U

这样就可以不用鼠标也能控制整个 tmux 窗口和管理 ssh 会话;但是在 MacOS 上有快捷键冲突问题,导致不能被正常使用这时得需要重新设置 tmux 的快捷键绑定方式,tmux 快捷键配置文件路径, ~/.tmux.conf ,使用默认 vim 命令编辑添加下面参数:

# 将`select-pane`快捷键更改为指定的键,避免与Mac上的快捷键冲突
unbind-key Up
unbind-key Down
unbind-key Left
unbind-key Right

bind-key -n C-h select-pane -L
bind-key -n C-j select-pane -D
bind-key -n C-k select-pane -U
bind-key -n C-l select-pane -R

bind-key C-n windwo-split -h

最后保存并关闭配置文件,然后重新加载配置:

tmux source-file ~/.tmux.conf

现在你可以使用新的快捷键来切换 tmux 窗口了。


其他资料

便宜 VPS vultr
最后修改:2023 年 07 月 05 日
如果觉得我的文章对你有用,请随意赞赏 🌹 谢谢 !