日期: 2024 年 10 月 12 日

  • 免费的异地组网神器Docker搭建教程-ZeroTiger

    v2-51c5c3590efa6bfbc4f4db36053da73c_1440w

    ZeroTiger是一个国外的服务商所提供的基于P2P的组网方案,它可以通过软件的形式实现将我们需要组网的设备加入到一个虚拟的局域网中,从而实现数据的交换。

    组网逻辑:

    1.组网设备接入Zerotier,并通过ID加入指定的虚拟网络。

    2.当设备之间发生数据交换时,网络调度设备间尝试P2P直连。

    3.失败时,从网络中寻找moon服务器作为中转。

    我们使用自己的云服务自建Moon服务器加入Zerotier网络,当P2P失败时,数据始终通过我们自建的私有根服务器作为中转。私有网络需要认证才可以加入,具有一定的安全性。

    1.搭建Zerotier根服务器

    依然使用我们的老伙计docker来实现,创建很简单,一条命令创建即可。

    docker run --restart=on-failure:3 -d --name ztncui -e HTTP_PORT=4000 -e HTTP_ALL_INTERFACES=yes -e ZTNCUI_PASSWD=admin@123 -p 4000:4000 keynetworks/ztncui
    
    v2-50aeecc54c9895c8574b0a4165221526_1440w

    2.搭建Moon服务器

    前面也介绍过了,使用Zerotier在一定程度上是可以P2P打洞成功的,不成功的时候就可以使用我们的Moon服务器来进行中转,保证完成组网。此服务需要占用tcp及udp的9993端口

    # 创建一个持久化存放文件的目录
    mkdir -p /opt/docker/moon
    # 获得云服务器的公网ip
    public_ip=`curl ip.sb`
    # 建立moon服务器
    docker run --name zerotier-moon -d -p 9993:9993 -p 9993:9993/udp -v /opt/docker/moon:/var/lib/zerotier-one jonnyan404/zerotier-moon -4 $public_ip
    
    v2-377be9d8bf36de4ac5160a44f9a8d913_1440w

    到此我们的服务端就搭建好了。查看一下日志,记录一下moon id,后面加入会用到。

    docker logs -f zerotier-moon
    
    v2-248e447426ba45b47f8e359bd955bb98_1440w

    3.创建网络

    使用我们云服务器 ip:4000访问,ip为云服务器的公网ip,打开配置页。

    v2-9bfa097eeda8bb540a7ddc22ce94381d_1440w

    点击右上角的login登录。

    v2-ab0dbc5c15a5416a8067f147e609fdfc_1440w

    使用默认用户名和密码登录: admin/admin@123,登录完成后根据提示修改密码。

    v2-ee9ba5ccd5a0ca521cefe77d2b87540a_1440w

    设置完成后,切换到Add network选项卡,任意为网络起一个名字。

    v2-197807d2b2360b9f5e8307fac2b18f49_1440w

    点击Create Network

    v2-90b862a8d1c0e22baaabf43fb19fe321_1440w

    这样我们的网络就设置好了,请记录创建好的网络id。

    v2-a999e77c5536b34cc3e067f1bcad6d9e_1440w

    回到上一级页面,最后在network上,设置网段,可以点击自动生成,然后提交。

    v2-be17385a59254559fa9e2c998834484c_1440w
    v2-6914898a38247435e41e136fb1b15019_1440w

    4.搭建客户端

    为了方便演示不同平台,我这里以一台Linux和一台Windows为例子演示组网过程。

    • Windows:

    首先到官方网站上下载Windows客户端:

    https://www.zerotier.com/download/
    

    安装很简单,下一步即可。完成后,在开始菜单中可以找到安装的ZeroTier软件,右下角会多出图标,打开面板。把之前记下的网络填入下方,点击Join Network。

    v2-90b6b0635b64ad049b3f0059efb7f38a_1440w

    回到网页上授权,并定义一个友好的名字,方便辨认。

    v2-9f1bd0316bb04179d7f23a607f4513b2_1440w

    客户端上,状态显示成功时,表示搭建成功。

    v2-b27cba8357f35f29e3ab031350ce8648_1440w

    最后在配置一下加入moon服务器,打开cmd。

    cd C:\ProgramData\ZeroTier\One
    zerotier-cli orbit [moon_id] [moon_id]
    

    将之前记录的moon id填进去后执行。

    v2-383e302d78e5e2ec40d3684af61da546_1440w

    查看是否加入monn节点:

    zerotier-cli listpeers
    

    可以看到其中包含我们自建moon服务器的公网ip地址。

    v2-025e0f9ee4bb76ec529a9b5e82cdab30_1440w
    • Linux:

    拉取镜像:

    docker pull bltavares/zerotier
    

    配置镜像:

    docker run -d --device=/dev/net/tun \
    --name zerotier-one \
    --net=host \
    --restart=always \
    --cap-add=NET_ADMIN \
    --cap-add=SYS_ADMIN \
    -v /var/lib/zerotier-one:/var/lib/zerotier-one \
    bltavares/zerotier:latest
    
    v2-648882187c5913ad9777c114626082d2_1440w

    加入zerotier网络

    docker exec zerotier-one zerotier-cli join [网络ID]
    
    v2-5142e213bdf1362dca2a78aee6b9b3e1_1440w

    显示 200 join ok 即添加成功。同样的需要在网页上去授权此节点。可以看到已经有虚拟ip生成,可以测试下两台主机之间的联通性。

    v2-e98306bed8240d3ca8f6ab351e8d4286_1440w

    发现已经可以使用p2p建立虚拟网络了,一台四川的服务器和一台北京的阿里云服务器,延迟大概40ms左右,效果还是很不错的。

    v2-16b12d71bb25015344ab47c125ad11f3_1440w

    最后再加入moon服务器,同样的需要把moon_ID的值修改为自建moon服务器的id。

    #加入moon服务器
    docker exec zerotier-one zerotier-cli orbit [moon_ID] [moon_ID]
    #确认是否加入
    docker exec zerotier-one zerotier-cli listpeers 
    
    v2-20043a27bed063d5f09ecb53d7728d62_1440w

    至此~

  • 删除linux网卡命令

    在Linux操作系统中删除网络接口的命令是ifconfigip命令。下面将详细说明如何使用这两个命令来删除Linux网卡。

    使用ifconfig命令删除网卡:

    1. 打开终端或控制台窗口。
    2. 输入ifconfig命令,查看当前系统中的网卡接口列表,确认要删除的网卡接口的名称,一般以ethenp开头。
    3. 输入以下命令以删除网卡接口: “ sudo ifconfig down # 关闭网卡接口 sudo ifconfig del # 删除网卡接口 “ 请将“替换为要删除的网卡接口的名称。
    4. 输入密码(如果有)以确认操作。

    使用ip命令删除网卡:

    1. 打开终端或控制台窗口。
    2. 输入ip link show命令,查看当前系统中的网卡接口列表,确认要删除的网卡接口的名称,一般以ethenp开头。
    3. 输入以下命令以删除网卡接口: “ sudo ip link set down # 关闭网卡接口 sudo ip link delete # 删除网卡接口 “ 请将“替换为要删除的网卡接口的名称。
    4. 输入密码(如果有)以确认操作。

    需要注意的是,删除网卡接口后将无法使用该接口进行网络连接。请确保在执行删除操作之前备份重要数据,并确保不会影响系统的正常运行。

    此外,还可以通过编辑/etc/network/interfaces文件或/etc/sysconfig/network-scripts/ifcfg-文件来删除网卡接口的配置信息,但这种操作比较复杂,需要对网络配置文件有一定的了解。强烈建议在进行此类操作之前备份相关配置文件,以防止意外数据丢失。

  • rpm 安装教程

    下面讲解一下,如何使用 rpm 命令对 RPM 二进制包进行安装、卸载和升级操作。我们以安装 apache 程序为例。

    RPM包默认安装路径

    通常情况下,RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到下表所示的目录中。

    RPM 包默认安装路径
    安装路径 含 义
    /etc/ 配置文件安装目录
    /usr/bin/ 可执行的命令安装目录
    /usr/lib/ 程序所使用的函数库保存位置
    /usr/share/doc/ 基本的软件使用手册保存位置
    /usr/share/man/ 帮助文件保存位置

    RPM 包的默认安装路径是可以通过命令查询的。

    除此之外,RPM 包也支持手动指定安装路径,但此方式并不推荐。因为一旦手动指定安装路径,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用(需要进行手工配置才能被系统识别),得不偿失。

    与 RPM 包不同,源码包的安装通常采用手动指定安装路径(习惯安装到 /usr/local/ 中)的方式。既然安装路径不同,同一 apache 程序的源码包和 RPM 包就可以安装到一台 Linux 服务器上(但同一时间只能开启一个,因为它们需要占用同一个 80 端口)。

    实际情况中,一台服务器几乎不会同时包含两个 apache 程序,管理员不好管理,还会占用过多的服务器磁盘空间。

    RPM 包的安装

    安装 RPM 的命令格式为:

    [root@localhost ~]# rpm -ivh 包全名

    注意一定是包全名。涉及到包全名的命令,一定要注意路径,可能软件包在光盘中,因此需提前做好设备的挂载工作。

    此命令中各选项参数的含义为:

    • -i:安装(install);
    • -v:显示更详细的信息(verbose);
    • -h:打印 #,显示安装进度(hash);

    例如,使用此命令安装 apache 软件包,如下所示:

    1. [root@localhost ~]# rpm -ivh \
    2. /mnt/cdrom/Packages/httpd-2.2.1515.el6.centos.1.i686.rpm
    3. Preparing…
    4. ####################
    5. [100%]
    6. 1:httpd
    7. ####################
    8. [100%]

    注意,直到出现两个 100% 才是真正的安装成功,第一个 100% 仅表示完成了安装准备工作。

    此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可,如下所示:

    [root@localhost ~]# rpm -ivh a
    .rpm b
    .rpm c
    .rpm

    如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:

    • -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
    • -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报”某个文件已经存在”的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
    • -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
    • -force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。
    • -test:测试安装。不会实际安装,只是检测一下依赖性。
    • -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。

    apache 服务安装完成后,可以尝试启动:

    [root@localhost ~]# service 服务名 start|stop|restart|status

    各参数含义:

    • start:启动服务;
    • stop:停止服务;
    • restart:重启服务;
    • status: 查看服务状态;

    例如:

    [root@localhost ~]# service httpd start #启动apache服务

    服务启动后,可以查看端口号 80 是否出现。命令如下:

    1. [root@localhost ~]# netstat -tlun | grep 80
    2. tcp 0 0 :::80 :::* LISTEN

    RPM包的升级

    使用如下命令即可实现 RPM 包的升级:

    [root@localhost ~]# rpm -Uvh 包全名

    -U(大写)选项的含义是:如果该软件没安装过则直接安装;若已经安装则升级至最新版本。

    [root@localhost ~]# rpm -Fvh 包全名

    -F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。

    RPM包的卸载

    RPM 软件包的卸载要考虑包之间的依赖性。例如,我们先安装的 httpd 软件包,后安装 httpd 的功能模块 mod_ssl 包,那么在卸载时,就必须先卸载 mod_ssl,然后卸载 httpd,否则会报错。

    软件包卸载和拆除大楼是一样的,本来先盖的 2 楼,后盖的 3 楼,那么拆楼时一定要先拆除 3 楼。

    如果卸载 RPM 软件不考虑依赖性,执行卸载命令会包依赖性错误,例如:

    1. [root@localhost ~]# rpm -e httpd
    2. error: Failed dependencies:
    3. httpd-mmn = 20051115 is needed by (installed) mod_wsgi-3.21.el6.i686
    4. httpd-mmn = 20051115 is needed by (installed) php-5.3.33.el6_2.8.i686
    5. httpd-mmn = 20051115 is needed by (installed) mod_ssl-1:2.2.1515.el6.
    6. centos.1.i686
    7. httpd-mmn = 20051115 is needed by (installed) mod_perl-2.0.410.el6.i686
    8. httpd = 2.2.1515.el6.centos.1 is needed by (installed) httpd-manual-2.2.
    9. 1515.el6.centos.1 .noarch
    10. httpd is needed by (installed) webalizer-2.21_023.3.el6.i686
    11. httpd is needed by (installed) mod_ssl-1:2.2.1515.el6.centos.1.i686
    12. httpd= 0:2.2.1515.el6.centos.1 is needed by(installed)mod_ssl-1:2.2.1515.el6.centos.1.i686

    RPM 软件包的卸载很简单,使用如下命令即可:

    [root@localhost ~]# rpm -e 包名

    -e 选项表示卸载,也就是 erase 的首字母。

    RPM 软件包的卸载命令支持使用“-nocteps”选项,即可以不检测依赖性直接卸载,但此方式不推荐大家使用,因为此操作很可能导致其他软件也无法征程使用。