openvpn使用

参考:

VPN说明

虚拟专用网络的诞生

internet不安全,企业专线又太贵,而且不能随地用,不灵活,vpn技术就可以很好的解决这个问题

虚拟专用网络介绍

VPN(全称Virtual Private Network)虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信网络的技术;

可以为企业之间或者个人与企业之间提供安全的数据传输隧道服务。

在VPN中任意两点之间的连接并没有传统专网所需的端到端的物理链路,而是利用公共网络资源动态组成的;

可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有同样功能的点到点的专线技术;

所谓虚拟是指不需要去拉实际的长途物理线路,而是借用了公共Internet网络实现。为了便于理解VPN概念,利用一个网络示意图进行说明:

image-20241206093953491

优点:

  • 安全性高:

在远端用户、驻外机构、合作伙伴、供应商与公司总部之间建立可靠的连接,保证数据传输的安全性。

这对于实现电子商务或金融网络与通讯网络的融合特别重要。

  • 费用低廉:

利用公共网络进行信息通讯,企业可以用更低的成本连接远程办事机构、出差人员和业务伙伴。

  • 支持移动:

支持出差VPN用户在任何时间、任何地点的移动接入,能够满足不断增长的移动业务需求。

  • 可扩展性:

由于VPN为逻辑上的网络,物理网络中增加或修改节点,不影响VPN的部署。

虚拟专用网络分类

01 根据VPN建设单位不同进行划分:

  • 租用运营厂商专线搭建VPN:

运营商的虚拟专线网络大多数都是使用MPLS VPN;企业通过购买运营商提供的VPN专线服务实现总部和分支机构间的通信需求;VPN网关为运营商所有。

https://blog.csdn.net/LiMITV/article/details/134961629

  • 企业内部自建环境搭建VPN:

企业内部自建基于Internet环境的vpn网络,常见的有IPSec VPN、GRE VPN、L2TP VPN、SSL VPN

  1. Ipsec
  2. GRE VPN
  3. L2TP VPN
  4. SSL VPN

企业自己购买VPN网络设备,搭建自己的VPN网络,实现总部和分支机构的通信,或者是出差员工和总部的通信;

02 根据VPN组网方式不同进行划分:

  • 远程访问VPN:

这种方式适用于出差员工拨号接入VPN的方式,员工可以在只要有Internet的地方都可以通过VPN接入访问企业内网资源。最常见类型有:SSL VPN、L2TPVPN

  • 站点之间VPN:

这种方式适合用于企业两个局域网互通的情况;例如企业的分支机构访问总部;最常见类型有:MPLS VPN、IPsecVPN

03 根据VPN工作网络层次进行划分:

应用层VPN:SSLVPN

网络层VPN:IPseC VPN、GREVPN

链路层VPN:L2TP2 VPN、PPTPVPN

隧道技术说明

VPN技术的基本原理其实就是用的隧道技术;

就类似于火车/地铁的轨道一样,从A站点到B站点都是直通的,不会堵车。对于乘客而言,就是专车;

隧道技术其实就是对传输的报文进行封装,利用公网建立专用的数据传输通道,从而完成数据的安全可靠传输;

省略了nat技术,将需要发送的数据进行封装,通过隧道到对端,对端再解封装。

环境搭建

主机 内网 外网
CentOS 7 (openvpn服务端) 172.16.30.102 192.168.174.142
Windows10(客户端) N/A 192.168.177.199
CentOS7(内网web服务器) 172.16.30.101 N/A

服务端

准备一台CentOS 7虚拟机,配置双网卡

image-20241209154521060

在CentOS 7上安装一个NetWorkManager,使用nmtui来配置网卡,配置之前的ip a看下网卡名字

image-20241209154949210

可以看到ens36网卡是没有地址的

image-20241209154724309

添加以太网卡,不用配网关

image-20241209155229497

确认即可,然后重启网络服务

systemctl restart network

image-20241209155351075

客户端

因为vm的虚拟网卡8是nat模式,这里我就直接用本机的环境测试了,ping的通服务端即可,然后这里是ping不通内网网段的

image-20241209155905707

image-20241209160346347

web端

这里可以直接克隆服务端的ctos,然后修改网卡配置

image-20241209155959689

进入系统进行同样的ip配置,记得克隆完不要一起启动,容易导致ip冲突,这里配置完可能需要重启才会修改网卡的ip地址

image-20241209161238213

image-20241209161304449

可以看到内网卡是通的,ping不通外网,简易的搭建一个web网站测试一下

记得提前关闭SELinux以及防火墙

python -m SimpleHTTPServer 80 //python2
python -m http.server 80 //python3

image-20241209162155064

在服务端是可以访问的,试试本机的windows环境

image-20241209162302478

建立隧道

image-20241211122352070

数据通过隧道传到openvpn服务端,openvpn服务端转发数据给web服务器,web服务器返回的数据,再通过openvpn服务端经隧道转发给客户端

操作系统基础优化配置

系统默认的selinux安全策略优化
# 临时关闭SELinux策略
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive

#永久关闭SELinux策略
[root@localhost ~]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted


[root@localhost ~]# sed -i '7s#enforcing#disabled#g' /etc/selinux/config
[root@localhost ~]# reboot
系统默认防火墙福务优化说明
# 查看防火墙状态
[root@localhost ~]# systemctl status firewalld.service
● firewalld.service
Loaded: masked (/dev/null; bad)
Active: inactive (dead)
Warning: firewalld.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@localhost ~]# systemctl is-active firewalld.service
inactive
[root@localhost ~]# systemctl is-enabled firewalld.service
masked
系统软件下载优化方法

CentOS换源

系统基础软件程序下载安装
# 企业应用基础工具程序
yum install -y tree nmap lrzsz dos2unix nc lsof wget -y

# 企业应用扩展程序
yum install -y psmisc net-tools bash-completion vim-enhanced git -y
  1. tree

    • 这是一个递归地列出目录内容的命令行工具,它会以树状图的形式显示目录结构,非常适合查看文件和文件夹的层级关系。
  2. nmap

    • 网络映射器(Network Mapper),这是一个开源的网络扫描和安全审计工具,用于发现网络上的设备,检测开放的端口,确定运行在网络设备上的服务及其版本信息,检测潜在的安全漏洞等。
  3. lrzsz

    • 这是一个用于在Unix和类Unix系统之间传输文件的工具集,包括rz(接收文件)和sz(发送文件)两个命令。它们通过串行端口或调制解调器进行文件传输。
  4. dos2unix

    • 这个工具用于将DOS/Windows风格的文本文件格式转换为Unix风格的文本文件格式,主要改变文件中的换行符(CR LF转换为LF)。
  5. nc(netcat):

    • 这是一个功能强大的网络工具,用于阅读和写入数据,可用于创建网络连接、监听端口、传输文件等。它常被称为“网络瑞士军刀”。
  6. lsof

    • 列出打开的文件(List Open Files),这是一个列出当前系统打开文件的工具。它可以用来查看哪些进程打开了哪些文件,包括常规文件、目录、网络文件系统、流管道等。
  7. wget

    • 这是一个非交互式的文件下载工具,可以从网络上下载文件。它支持HTTP、HTTPS和FTP协议,可以递归下载,支持断点续传等。
  8. psmisc

    • 这个包提供了一些额外的进程管理工具,最著名的是pstree命令,它可以以树状图的形式显示进程之间的父子关系,以及fuser命令,用于查找访问特定文件、套接字或文件系统的进程。
  9. net-tools

    • 这是一个网络工具包,包含了许多用于网络配置和诊断的工具,如ifconfig(用于配置和显示Linux内核中网络接口的网络参数)、netstat(显示网络端口和路由表信息)、route(显示和操作路由表)等。
  10. bash-completion

    • 这是一个为Bash shell提供自动补全功能的软件包。它允许用户在输入命令时自动补全命令、文件名、变量名等,提高命令行的效率和易用性。
  11. vim-enhanced

    • 这是Vim编辑器的一个增强版,包含了额外的功能和插件,如语法高亮、代码折叠、自动缩进等,使得Vim更加强大和易于使用。
  12. git

    • 这是一个分布式版本控制系统,用于跟踪代码变更、协调多人协作开发。Git是目前世界上最流行的版本控制系统,被广泛用于软件开发项目中。

证书制作

根据之前的openvpn软件工作原理说明,在部署虚拟专用网络服务之前,需要进行相关证书文件制作;

证书文件制作过程,需要使用到easy-rsa.zip工具进行制作证书。

制作证书工具下载:https://github.com/OpenVPN/easy-rsa将证书制作

工具上传到主机中:

rz -y 
unzip easy-rsa-old-master.zip
cd /easy-rsa-old-master/easy-rsa/2.0/
ls

image-20241209171545028

编辑vars文件,这个文件是一些个人信息,用来表明身份的

# 改最底下的这部分就行
export KEY_COUNTRY="CN"
export KEY_PROVINCE="FJ"
export KEY_CITY="FZ"
export KEY_ORG="XIAO"
export KEY_EMAIL="123@qq.com"
export KEY_CN=youzipii
export KEY_NAME=youzipii
export KEY_OU=youzipii
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
# 快速生效
[root@localhost 2.0]# source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/easy-rsa-old-master/easy-rsa/2.0/keys
# 这里新部署的话是没有的,这里是我们生成的私钥,证书之类的存放目录,我们可以先自己创建一个,注意位置
[root@localhost 2.0]# mkdir keys
[root@localhost 2.0]# ./clean-all
[root@localhost 2.0]# ll keys/
total 4
-rw-r--r--. 1 root root 0 Dec 9 17:24 index.txt
-rw-r--r--. 1 root root 3 Dec 9 17:24 serial
生产根证书文件和私钥文件
[root@localhost 2.0]# ./build-ca

image-20241209172733407

这里会让我们填写个人信息,但我们刚刚在vars文件里填写过了,所以直接回车使用默认就行,然后我们可以查看keys目录下有没有新生产的私钥和证书

[root@localhost 2.0]# ls -l keys/
total 12
-rw-r--r--. 1 root root 2329 Dec 9 17:27 ca.crt //证书
-rw-------. 1 root root 3272 Dec 9 17:27 ca.key //私钥
-rw-r--r--. 1 root root 0 Dec 9 17:24 index.txt
-rw-r--r--. 1 root root 3 Dec 9 17:24 serial
生产服务端证书和私钥文件
[root@localhost 2.0]# ./build-key-server youzipii //youzipii可任意换

image-20241209173111638

同样回车就行,password看这里,我这里默认为空,不影响,最后输两个y确认一下即可,然后去查看keys目录下有没有服务端证书

[root@localhost 2.0]# ll keys/
total 48
-rw-r--r--. 1 root root 8061 Dec 9 17:30 01.pem
-rw-r--r--. 1 root root 2329 Dec 9 17:27 ca.crt
-rw-------. 1 root root 3272 Dec 9 17:27 ca.key
-rw-r--r--. 1 root root 114 Dec 9 17:30 index.txt
-rw-r--r--. 1 root root 21 Dec 9 17:30 index.txt.attr
-rw-r--r--. 1 root root 0 Dec 9 17:24 index.txt.old
-rw-r--r--. 1 root root 3 Dec 9 17:30 serial
-rw-r--r--. 1 root root 3 Dec 9 17:24 serial.old
-rw-r--r--. 1 root root 8061 Dec 9 17:30 youzipii.crt //服务端证书
-rw-r--r--. 1 root root 1744 Dec 9 17:30 youzipii.csr //证书请求文件,实验中没有找合法的机构申请,所以csr没什么用这里
-rw-------. 1 root root 3272 Dec 9 17:30 youzipii.key //服务端私钥
生成客户端证书和密钥文件
[root@localhost 2.0]# ./build-key client //客户端我就用client了,也是可以随意替换的

同样是一直回车,最后输入两个y确认即可,然后我们去查看下客户端的证书是否生成

[root@localhost 2.0]# ll keys/
total 80
-rw-r--r--. 1 root root 8061 Dec 9 17:30 01.pem
-rw-r--r--. 1 root root 7937 Dec 9 17:36 02.pem
-rw-r--r--. 1 root root 2329 Dec 9 17:27 ca.crt
-rw-------. 1 root root 3272 Dec 9 17:27 ca.key
-rw-r--r--. 1 root root 7937 Dec 9 17:36 client.crt
-rw-r--r--. 1 root root 1744 Dec 9 17:36 client.csr
-rw-------. 1 root root 3268 Dec 9 17:36 client.key
-rw-r--r--. 1 root root 226 Dec 9 17:36 index.txt
-rw-r--r--. 1 root root 21 Dec 9 17:36 index.txt.attr
-rw-r--r--. 1 root root 21 Dec 9 17:30 index.txt.attr.old
-rw-r--r--. 1 root root 114 Dec 9 17:30 index.txt.old
-rw-r--r--. 1 root root 3 Dec 9 17:36 serial
-rw-r--r--. 1 root root 3 Dec 9 17:30 serial.old
-rw-r--r--. 1 root root 8061 Dec 9 17:30 youzipii.crt
-rw-r--r--. 1 root root 1744 Dec 9 17:30 youzipii.csr
-rw-------. 1 root root 3272 Dec 9 17:30 youzipii.key

可以看到同样生成了

生成密钥交换文件信息(Diffie-Hellman密钥交换算法)

这一步比较耗时间

root@localhost 2.0]# ./build-dh 
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
........

这会在keys目录下生成一个密钥文件

[root@localhost 2.0]# ll keys/
total 84
....
-rw-r--r--. 1 root root 424 Dec 9 17:39 dh2048.pem

最终会生成重要的7哥文件,ca2个、server2个、client2个、DH一个。

OpenVPN服务配置

如果之前换源,一起换了epel源就可以直接在系统里安装下载了

[root@localhost yum.repos.d]# yum install -y openvpn
阿里云镜像的版本是2.4.12

image-20241209175258398

最好是服务端和客户端版本保持一致

编写修改openvpn福务配置文件

# 建立存好openvpn服务加载证文件目录
[root@localhost yum.repos.d]# cd /etc/openvpn/
[root@localhost openvpn]# mkdir keys
[root@localhost openvpn]# ls
client keys server

# 将之前生成的证书文件信息进行拷贝迁移,我这里youzipii指代的是server端
[root@localhost openvpn]# cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/youzipii.crt ./keys/
[root@localhost openvpn]# cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/youzipii.key ./keys/
[root@localhost openvpn]# cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/ca.crt ./keys/
[root@localhost openvpn]# cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/dh2048.pem ./keys/
[root@localhost openvpn]# ll keys/
total 20
-rw-r--r--. 1 root root 2329 Dec 9 17:56 ca.crt
-rw-r--r--. 1 root root 424 Dec 9 17:56 dh2048.pem
-rw-r--r--. 1 root root 8061 Dec 9 17:56 youzipii.crt
-rw-------. 1 root root 3272 Dec 9 17:56 youzipii.key

# 拷贝openvpn服务模板配置文件
[root@localhost openvpn]# pwd //别拷到keys里了
/etc/openvpn
[root@localhost openvpn]# cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf ./
[root@localhost openvpn]# ll server.conf
-rw-r--r--. 1 root root 10784 Dec 9 17:59 server.conf

编辑openvpn服务模板配置文件

[root@localhost openvpn]# vim server.conf
78 ca keys/ca.crt
79 cert keys/youzipii.crt
80 key keys/youzipii.key
85 dh keys/dh2048.pem
更改配置加载的证书文件路径信息
101 server 10.8.0.0 255.255.255.0
当vpn拨号建立连接成功后,会生成的隧道连接网段信息
143 push "route 10.8.0.0 255.255.255.0
144 push "route 172.16.30.0 255.255.255.0
表示路由信息推送,可以让拨号的客户端主机路由表中,添加以上两个路由条目信息;最终实现和企业私网以及vpn隧道私网建立通信
246 tls-auth keys/ta.key 0
表示拒绝服务攻击的道书
254 cipher AES-256-GCM
表示设置数据传输的加密模式,从2.4版本之后不能使用CBC模式了,需要改为GCM

tips: 命令行模式下/+要搜索的字符串,回车后可以快速查询

image-20241209180339766

将相关配置文件替换为自己生成的证书和密钥

tips: vim 命令行模式下 :set nu可以显示行号

image-20241209180145687

自定义隧道地址,我这里用默认的10.8.0.0

image-20241209180527247

添加路由,我们可以到客户端看看,路由表是没有这条的

tips:yy复制,p粘贴

image-20241209182205906

image-20241209181809694

这里还有一个用来抵御DOS攻击的参数,这个文件目前

image-20241209181947178

最后2.4版本后加密模式不能用CBC,得改成GCM

image-20241209182324583

保存并退出,然后设置开启openvpn服务器路由转发

# 启用路由转发功能
[root@localhost openvpn]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

# 生效指令
[root@localhost openvpn]# sysctl -p
net.ipv4.ip_forward = 1

建立ta.key文件,记得修改配置文件,不然启动不了

[root@localhost keys]# pwd
/etc/openvpn/keys
[root@localhost keys]# openvpn --genkey --secret ta.key
[root@localhost keys]# ls
ca.crt dh2048.pem ta.key youzipii.crt youzipii.key

遇到报错了

[root@localhost openvpn]# systemctl status openvpn@server.service

image-20241209184715499

刚刚生成ta.key没有配置进去

启动运行openvpn服务程序

[root@localhost openvpn]# openvpn --daemon --config server.conf
[root@localhost openvpn]# netstat -lntup | grep 1194
udp 0 0 0.0.0.0:1194 0.0.0.0:* 55134/openvpn

image-20241209184617160

因为第二天重启了虚拟机,临时配置的selinux策略恢复了,openvpn挂了

image-20241210200138723

重新配置一下

setenforce 0 
getenforce

OpenVPN客户端

编写配置openvpn客户但程序配置文件

先在服务端创建一个用于汇总客户端信息的文件夹

[root@localhost ~]# mkdir client
[root@localhost client]# pwd
/root/client

# 复制客户端文件
[root@localhost client]# cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /root/client//
[root@localhost client]# ls
client.conf

# 编辑配置文件
[root@localhost client]# vim client.conf

添加外网网卡的IP

image-20241210202551776

修改加密方式

image-20241210202639524

导出保存openvpn客户端证书相关文件

# 汇总拷贝整理客户端相关证书文件
[root@localhost client]# cp ~/easy-rsa-old-master/easy-rsa/2.0/keys/client.key /root/client/
[root@localhost client]# cp ~/easy-rsa-old-master/easy-rsa/2.0/keys/client.crt /root/client/
[root@localhost client]# cp ~/easy-rsa-old-master/easy-rsa/2.0/keys/ca.crt /root/client/
[root@localhost client]# cp /etc/openvpn/keys/ta.key /root/client/
# 检查信息
[root@localhost client]# ll
total 24
-rw-r--r--. 1 root root 2329 Dec 10 20:28 ca.crt
-rw-r--r--. 1 root root 3614 Dec 10 20:26 client.conf
-rw-r--r--. 1 root root 7937 Dec 10 20:28 client.crt
-rw-------. 1 root root 3268 Dec 10 20:28 client.key
-rw-------. 1 root root 636 Dec 10 20:29 ta.key

#修改客户端文件后缀名称信息
[root@localhost client]# pwd
/root/client
[root@localhost client]# mv client.conf client.ovpn
[root@localhost client]# ll client.ovpn
-rw-r--r--. 1 root root 3614 Dec 10 20:26 client.ovpn

将所有openvpn客户端所需文件数据打包并下载保存

[root@localhost ~]# pwd
/root
[root@localhost ~]# zip client.zip client/*
adding: client/ca.crt (deflated 31%)
adding: client/client.crt (deflated 46%)
adding: client/client.key (deflated 24%)
adding: client/client.ovpn (deflated 54%)
adding: client/ta.key (deflated 40%)
[root@localhost ~]# ll client.zip
-rw-r--r--. 1 root root 11222 Dec 10 20:43 client.zip
[root@localhost ~]# sz -y client.zip

image-20241210204357494

下载windows使用的客户端

image-20241210204810146

下载好对应的文件,一直下一步即可

运行启动客户端软件程序,并将之前下载的客户端相关证书与配置文件导入到客户端软件程序中:

image-20241210210212424

修改客户端程序设置中的高级选项配置信息,双击是不会跳出来的,右键右下角的隐藏图标才可以,选择选项

image-20241210210422618

image-20241210210330867

然后再右键这个图标,选择client节点,选择连接

image-20241210210545427

image-20241210210533157

在ipconfig中也可以看到配置

image-20241210210737855

我们进入网络适配器看看具体信息

image-20241210211214903

那说明我们服务端也该有个ip才对

image-20241210211409377

测试连通性,以及问题解决

  • 客户端
    • 10.8.0.6
  • 服务端
    • 10.8.0.1
    • 内网卡: 172.16.30.102
    • 内网主机:172.16.30.101

客户端ping服务端

image-20241210215126448

ping不通内网的web服务器。。。

试试服务端ping客户端

image-20241210215250320

ping不通客户端的地址,不懂为什么,试着换了下vm的windows,就可以了

image-20241211102235401

win-ipconfig

image-20241211102325191

服务端配置nat转发

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE
# 有些可能会有问题,可以按下面这个配置
[root@localhost ccd]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens36 -j MASQUERADE
[root@localhost ccd]# iptables -I FORWARD 1 -i tun0 -o ens36 -j ACCEPT
[root@localhost ccd]# iptables -I FORWARD 1 -i ens36 -o tun0 -j ACCEPT
  1. iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens36 -j MASQUERADE
    • 这个命令添加了一条规则到 nat 表的 POSTROUTING 链。
    • -A 表示追加(Append)规则。
    • -s 10.8.0.0/24 指定源地址为 10.8.0.0/24 子网。
    • -o ens36 指定输出接口为 ens36
    • -j MASQUERADE 表示使用 MASQUERADE 目标,这是一种特殊的 NAT 模式,用于动态 IP 地址转换,通常用于拨号或移动网络。
  2. iptables -I FORWARD 1 -i tun0 -o ens36 -j ACCEPT
    • 这个命令向 FORWARD 链插入(-I 表示插入)了一条规则,位置在链的第1条。
    • -i tun0 指定输入接口为 tun0
    • -o ens36 指定输出接口为 ens36
    • -j ACCEPT 表示如果匹配这条规则,则接受(ACCEPT)数据包。
  3. iptables -I FORWARD 1 -i ens36 -o tun0 -j ACCEPT
    • 这个命令同样向 FORWARD 链插入了一条规则,位置在链的第1条。
    • -i ens36 指定输入接口为 ens36
    • -o tun0 指定输出接口为 tun0
    • -j ACCEPT 表示如果匹配这条规则,则接受(ACCEPT)数据包。

image-20241211113846941

但还是ping不通,但ping 10.8.0.1是通的,监听一下网卡tun0看看

[root@localhost openvpn]# tcpdump -i tun0

image-20241211113941437

可以看到是有数据包过来的,应该是准发规则没做好,搜了下,找到 一篇文章,重新配置过nat,就可以了

image-20241211121717810

查看配置

# 查看 FORWARD
iptables -vL FORWARD --line-numbers
# 查看 POSTROUTING
iptables -t nat -vnL POSTROUTING --line-numbers

image-20241211121737877

功能测试

之前不是搭建了简单的web站点在30.101,我们现在客户端上访问试试

image-20241211121944045

可以看到也是成功访问到了