局域网组建(一) 远程办公实现 — WireGuard组建跨地域局域网(AlmaLinux+Docker)

  远程访问局域网设备通常采用内网穿透或VPN隧道。WireGuard是一种采用UDP协议的新型VPN技术。WireGuard提供的是节点与节点的网络连接形式,除了可以实现传统VPN以服务器为网关的星型拓扑结构,还可以节点与任意其他节点进行连接,实现节点间的全互联,解决了单一网关导致的网络瓶颈。

  AlmaLinux为CentOS停止维护后的继承者,是Red Hat的下游版本,拥有10年生命周期。本次实验采用AlmaLinux安装Docker来实现WireGuard的部署。

目录

一、AlmaLinux配置

1.配置阿里云镜像源

2.更新系统应用

3.配置密钥远程登录

二、安装Docker

1. 方法一:通过宝塔面板安装

2. 方法二:终端直接安装

三、安装WireGuard(Place1/wg-access-server项目)

1. 安装

2. 检查容器运行状态

3. 端口放通

4. 访问管理面板

四、客户端配置

1. 配置信息生成

2. 导入配置信息

3. 连接建立:

五、容器运行异常排查

1. 查看Docker容器运行日志:

2. 错误处理


  WireGuard跨区域组网需要至少一台机器具有公网IP或在局域网内组网。如果仅有一台机器具备公网IP(可为云服务器),想要组建跨地域局域网,只能采用单一网关的星型拓扑结构,本实验将演示该情况下的跨地域组网。

一、AlmaLinux配置

1.配置阿里云镜像源

  配置方法参考:almalinux镜像源配置 - 阿里巴巴开源镜像站

2.更新系统应用

  终端内执行以下命令: 

dnf upgrade -y
reboot

3.配置密钥远程登录

1)密钥文件产生

  法一:云服务提供商后台管理面板直接生成.pem的密钥文件。将.pem文件Load到puttygen.exe软件中。复制“Public key for pasting into OpenSSH authorized_keys file”文本框里的公钥。点击Save private key,保存.ppk的私钥文件用于后续登录。

  法二:打开puttygen.exe软件,密钥类型选择RSA,点击Generate按钮,产生过程中不停晃动鼠标直至产生完毕。复制“Public key for pasting into OpenSSH authorized_keys file”文本框里的公钥。点击Save private key,保存.ppk的私钥文件用于后续登录。

2)Putty密钥登录

  ① 配置登录信息

图1 设定服务器IP和端口
图2 指定登录账户
图3 指定私钥文件

  ② 点击Open按钮即可登录。

二、安装Docker

1. 方法一:通过宝塔面板安装

1)防火墙配置:宝塔面板从CentOS 7开始只支持firewalld防火墙。关闭iptables并开启firewalld。

systemctl stop iptables
systemctl disable iptables
systemctl start firewalld
systemctl enable firewalld

 2)面板安装:

  安装方法:宝塔面板下载和安装

  复制CentOS安装脚本进行安装即可。

  【注意】需在服务器安全组放通宝塔面板管理页面端口

3)Docker安装:登录面板后,前往 软件商店,安装 Docker管理器

  后续Docker的使用可以直接在宝塔面板内可视化管理,也可在终端中使用docker命令管理。

2. 方法二:终端直接安装

官方指导文档:Install Docker Engine on CentOS | Docker Documentation

1)启动防火墙

systemctl stop iptables
systemctl disable iptables
systemctl start firewalld
systemctl enable firewalld

2)安装docker

yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

3)启动docker

systemctl start docker
systemctl enable docker

4)docker管理常用命令

# 查看所有容器
docker ps -a
# 删除指定的容器(<dockerID>替换实际的容器ID)
docker rm <dockerID>
# 查看镜像
docker images
# 删除指定的镜像(<imageID>替换实际的镜像ID)
docker rmi <imageID>
# 查看前1000行日志(法1)
docker logs --tail=1000 <dockerID>
# 查看前1000行日志(法2)
cat /var/lib/docker/containers/<dockerID>/<dockerID>-json.log
# 清除日志
cat /dev/null > /var/lib/docker/containers/<dockerID>/<dockerID>-json.log

三、安装WireGuard(Place1/wg-access-server项目)

  项目地址:https://github.com/Place1/wg-access-server

  配置说明:Configuration - wg-access-server

1. 安装

  终端中运行以下命令:

docker run -d \
  --cap-add NET_ADMIN \
  --device /dev/net/tun:/dev/net/tun \
  -v wg-access-server-data:/data \
  -e "WG_ADMIN_USERNAME=admin" \
  -e "WG_ADMIN_PASSWORD=123456" \
  -e "WG_WIREGUARD_PRIVATE_KEY=xxxxxxxx" \
  -e "WG_PORT=51821" \
  -e "WG_WIREGUARD_PORT=51820" \
  -e "WG_VPN_CIDR=10.0.32.0/24" \
  -e "WG_VPN_ALLOWED_IPS=0.0.0.0/0, ::/0" \
  -e "WG_LOG_LEVEL=info" \
  -e “WG_VPN_GATEWAY_INTERFACE=eth0” \
  -p 51821:51821/tcp \
  -p 51820:51820/udp \
  --restart unless-stopped \
  --privileged=true \
  place1/wg-access-server

  【配置说明】(红色部分对应的配置必须修改)

  ① 14~15行配置端口映射,:前为宿主机端口,:后为容器内端口。14行为管理面板的TCP端口,15行为WireGuard的UDP端口。宿主机端口需在服务器安全组放通。

  ② 16行用于开机自启动容器

  ③ 5~13行配置容器的环境变量,5~6行配置管理面板的用户名密码,7行为服务器私钥(可安装WireGuard的windows客户端,新建空隧道自动产生一个)。8~9行为容器内的管理面板TCP端口、WireGuard的UDP端口(建议此端口容器内和宿主机一致,否则在Web面板生成的客户端配置文件端口号是容器内的,需要手动改为宿主机的才能正确连接)。10行为客户端IP地址段。11行为允许访问的目标IP段。12行为全局日志级别。13行为WireGuard网关流量转发接口,需更改为宿主机的外网接口(可在终端内执行ifconfig命令,来查看外网接口名)。

2. 检查容器运行状态

docker ps -a

  如果运行状态中为Up,则表明容器运行正常。如果运行状态中一直为Restarting,则需要进一步从日志中检查错误原因。(详见 五、容器运行异常排查

3. 端口放通

  在服务器安全组中,放通TCP和UDP端口。本例中WireGuard管理面板为TCP (51821),WireGuard为UDP (51820)。

4. 访问管理面板

  管理面板地址:http://服务器公网IP:管理面板TCP端口号(本例端口为51820)

  输入配置的用户名和密码登入管理面板(本例为admin/123456)

四、客户端配置

  WireGuard应用下载:https://www.wireguard.com/install/

1. 配置信息生成

  在WireGuard管理面板中,输入设备名称后点击 “Add” 添加设备。

2. 导入配置信息

  电脑客户端直接下载配置文件,在WireGuard应用内新建隧道,将配置文件导入至隧道。手机客户端直接扫码即可添加节点。

图4 WireGuard节点添加
图5 配置信息获取

3. 连接建立:

1)点击 连接 按钮即可使能当前节点。

2)在Windows系统中打开CMD命令提示符,通过Ping其他节点,如果Ping正常即表明连接正常(注意:如果Ping的是Windows节点,则需要正确配置Windows系统防火墙或暂时关闭)。

图6 Ping测试

五、容器运行异常排查

1. 查看Docker容器运行日志:

1)记录对应容器的ID

docker ps -a
图7 容器ID查看

2)查看docker日志,根据日志错误情况进行解决。

docker logs <dockerID>

2. 错误处理

  下面仅提供一种错误的解决办法,其他错误自行查找资料。

错误exit status 3: iptables v1.8.3 (legacy): can't initialize iptables table `filter': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.

解决:加载内核模块iptable_filter;或升级Linux Kernel内核。

  参考:加载内核iptable防火墙相关centos上docker无法启动 | 宋祎超

  内核的阿里云镜像:linux-kernel安装包下载_开源镜像站-阿里云

步骤:

方法一:加载内核模块iptable_filter

[root@localhost ~]# modprobe iptable_filter
[root@localhost ~]# lsmod | grep ip
iptable_filter         16384  0
ip_tables              28672  1 iptable_filter
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack

        开机自动加载

[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# echo modprobe iptable_filter>>/etc/rc.local

        若无效,尝试法二。

法二:重新编译内核

1)获取内核文件

  找到合适版本或最新版本:https://mirrors.aliyun.com/linux-kernel/v5.x/linux-5.19.4.tar.gz

  终端执行:

wget https://mirrors.aliyun.com/linux-kernel/v5.x/linux-5.19.4.tar.gz
tar -xvf linux-5.19.4.tar.gz

2)配置内核选项

cd linux-5.19.4
make menuconfig

  按《参考:centos上docker无法启动》链接内容的说明设置好配置选项并保存。

  如果提示Unable to find the ncurses package. 则按照提示安装ncurses-devel 或 libncurses-dev其中一个即可。

3)编译模块(约需要2小时)

make clean
make modules -j 8  # 8核编译

4)安装模块

make modules_install

提示】如果安装模块时,出现以下错误,则需要检查编译是否顺利完成。

sed: can't read modules.order: No such file or directory

make: *** [Makefile:1478: __modinst_pre] Error 2

  可留意编译过程中的错误输出信息,或者重新执行make modules -j 8进行模块编译,将会直接打印错误信息。如果编译的错误信息为:

make[1]: *** No rule to make target 'certs/rhel.pem', needed by 'certs/x509_certificate_list'.  Stop.

  则编辑 linux-5.19.4 目录里的 .config 文件:

vim .config

  在vim编辑器内,查找并注释掉以下内容:

#CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"
#CONFIG_DEBUG_INFO_BTF=y

  保存后输入make modules -j 8重新编译即可。执行命令后如有选项则直接回车保持默认,直到屏幕显示开始编译。

5)编译并安装内核

make bzImage
make install

6)生效配置

grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

7)查看内核版本是否已更新

uname -r

8)查看docker容器是否已经处于up状态

docker ps -a

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker局域网中的使用可以通过以下几个步骤实现: 1. 配置Docker容器的网络:可以使用docker network命令创建一个自定义的网络,例如: ``` docker network create mynetwork ``` 然后,将Docker容器连接到这个网络: ``` docker run --network=mynetwork mycontainer ``` 2. 暴露Docker容器的端口:可以使用docker run命令的-p参数将Docker容器的端口映射到宿主机的端口上,例如: ``` docker run -p 8080:80 mycontainer ``` 这样,Docker容器的80端口将被映射到宿主机的8080端口上,从而可以通过宿主机的IP地址和8080端口访问Docker容器。 3. 配置宿主机的网络:如果希望在局域网中直接通过IP访问Docker容器,可以将宿主机的网络配置为桥接模式。在桥接模式下,Docker容器将获得一个与宿主机在同一局域网的IP地址。可以使用docker network命令创建一个桥接网络,并将宿主机连接到这个网络: ``` docker network create --driver=bridge mynetwork docker network connect mynetwork myhost ``` 这样,Docker容器将获得一个与宿主机在同一局域网的IP地址,可以直接通过该IP地址访问Docker容器。 需要注意的是,以上步骤仅适用于在局域网内部访问Docker容器。如果需要从外部网络访问Docker容器,还需要进行相应的网络配置和端口映射。 #### 引用[.reference_title] - *1* *2* *3* [Docker容器通过独立IP暴露给局域网的方法](https://blog.csdn.net/lvshaorong/article/details/69950694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有昵称<-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值