杯子茶室

关注有趣的事物

CUPNET v0.2 基础实现(0.5) - 搭建实验网络环境

网络 0 评 59 度
这是一个系列文章,你可以点击以下链接查看这个系列的其他文章。
CUPNET v0.2 设计大纲 - 自上而下,抗封锁软件定义的混合云(混乱云)网络架构设计构思详解
CUPNET v0.2 基础实现(0.5) - 搭建实验网络环境
CUPNET v0.2 基础实现(1) - 自动生成并推送Core节点的Wireguard VPN配置文件

由于CUPNET这个网络的整体设计与开发规模不算特别的微小,需要调试和测试的地方也不少,故最好先搭建一个开发环境,以便于之后的开发测试。

这篇文章简述我如何搭建开发试验使用的网络环境的。

使用Docker搭建实验网络环境

这个实验网络将会包含七个节点。

有3台Core,4台CE。其中CE全部位于NAT后面,Core全部暴露于公网,所有节点需要使用FRRouting和Wireguard进行测试。为了测试方便和部署方便,决定使用Docker搭建实验网络环境。

以接线方式划分,这七台机子都处于单一因特网内,所以将所有Docker容器划定为单一网络即可。划分IP的方式如下。

容器IP
Core1100.90.1.1
Core2100.90.1.2
Core3100.90.1.3
CE1100.90.2.1
CE2100.90.2.2
CE3100.90.2.3
CE4100.90.2.4

创建网络。

docker network create net-test --subnet=100.90.0.0/16

编辑Dockerfile,自行构造一个包含SSH Server、Wireguard和FRR的Docker镜像

FROM frrouting/frr:latest
LABEL maintainer="[email protected]"

RUN apk update && apk add wireguard-tools

ARG ssh_pub_key

RUN mkdir -p /root/.ssh \
    && chmod 0700 /root/.ssh \
    && passwd -u root \
    && echo "$ssh_pub_key" > /root/.ssh/authorized_keys \
    && apk add openrc openssh \
    && ssh-keygen -A \
    && echo -e "PasswordAuthentication yes" >> /etc/ssh/sshd_config \
    && echo -e "PermitRootLogin yes" >> /etc/ssh/sshd_config \
    && mkdir -p /run/openrc \
    && touch /run/openrc/softlevel 
    && echo 'root:password' | chpasswd


WORKDIR /app

COPY dockerentry.sh /dockerentry.sh

ENTRYPOINT ["/dockerentry.sh"]

CMD ['']

在Dockerfile根目录外编辑dockerentry.sh文件,编辑Docker入口。

#!/bin/bash

sh -c rc-status
rc-service sshd start
/usr/lib/frr/docker-start

创建完毕之后打开使用以下命令构建镜像

docker build -t fullnet .

等待构建完毕之后使用以下命令启动镜像。

docker run --net net-test --ip 100.90.1.1 -d --cap-add cap_net_admin --cap-add cap_net_raw --cap-add cap_sys_admin --name CUPNET_CORE1 fullnet
docker run --net net-test --ip 100.90.1.2 -d --cap-add cap_net_admin --cap-add cap_net_raw --cap-add cap_sys_admin --name CUPNET_CORE2 fullnet
docker run --net net-test --ip 100.90.1.3 -d --cap-add cap_net_admin --cap-add cap_net_raw --cap-add cap_sys_admin --name CUPNET_CORE3 fullnet
docker run --net net-test --ip 100.90.2.1 -d --cap-add cap_net_admin --cap-add cap_net_raw --cap-add cap_sys_admin --name CUPNET_CE1 fullnet
docker run --net net-test --ip 100.90.2.2 -d --cap-add cap_net_admin --cap-add cap_net_raw --cap-add cap_sys_admin --name CUPNET_CE2 fullnet
docker run --net net-test --ip 100.90.2.3 -d --cap-add cap_net_admin --cap-add cap_net_raw --cap-add cap_sys_admin --name CUPNET_CE3 fullnet
docker run --net net-test --ip 100.90.2.4 -d --cap-add cap_net_admin --cap-add cap_net_raw --cap-add cap_sys_admin --name CUPNET_CE4 fullnet

也可以编写docker-compose.yml进行配置

version: "3"

services:
    core1:
        build: 
            context: ./
            dockerfile: Dockerfile
        cap_add:
            - ALL
        networks:
            test-main-network:
                ipv4_address: "100.90.1.1"
            test-core1:
                ipv4_address: "100.64.1.2"
    core2:
        build: 
            context: ./
            dockerfile: Dockerfile
        cap_add:
            - ALL
        networks:
            test-main-network:
                ipv4_address: "100.90.1.2"
            test-core2:
                ipv4_address: "100.64.2.2"
    core3:
        build: 
            context: ./
            dockerfile: Dockerfile
        cap_add:
            - ALL
        networks:
            test-main-network:
                ipv4_address: "100.90.1.3"
            test-core3:
                ipv4_address: "100.64.3.2"
    cd1:
        build: 
            context: ./
            dockerfile: Dockerfile
        cap_add:
            - ALL
        networks:
            test-main-network:
                ipv4_address: "100.90.2.1"
    ce2:
        build: 
            context: ./
            dockerfile: Dockerfile
        cap_add:
            - ALL
        networks:
            test-main-network:
                ipv4_address: "100.90.2.2"
    ce3:
        build: 
            context: ./
            dockerfile: Dockerfile
        cap_add:
            - ALL
        networks:
            test-main-network:
                ipv4_address: "100.90.2.3"
    ce4:
        build: 
            context: ./
            dockerfile: Dockerfile
        cap_add:
            - ALL
        networks:
            test-main-network:
                ipv4_address: "100.90.2.4"

networks:
    test-main-network:
        ipam:
            driver: default
            config:
                - subnet: "100.90.0.0/16"
    test-core1:
        ipam:
            driver: default
            config:
                - subnet: "100.64.1.0/24"
    test-core2:
        ipam:
            driver: default
            config:
                - subnet: "100.64.2.0/24"
    test-core3:
        ipam:
            driver: default
            config:
                - subnet: "100.64.3.0/24"

测试SSH是否可以连接,默认密码为password

ssh [email protected]
CUPNET v0.2 设计大纲 - 将CORE节点连接起来
发表评论
撰写评论