用RouterOS/QEMU在Tinc TAP VPN内部实现DHCP

我有一个把世界各地的服务器连接起来构建一个内网的需求。Tinc是一个不错的Mesh VPN,但是它的三层自动配置用起来总是觉得有点不爽。如果用二层配置呢,我又一点都不想把Linux改造成路由器(配置太烦了)。所以有一天突发奇想,我能不能用QEMU启动一个RouterOS,然后在上面跑DHCP服务器,把它和二层的Tinc连接起来呢?经过一些尝试,这么做是可行的。

以下所有配置基于Ubuntu 16.10。

准备工作:安装所需的包

接入点

客户端

配置Tinc TAP VPN

Tinc需要你给每个网络取一个名字,然后给你的每个节点取一个名字。本文中网络名用 <network_name> 表示,当前节点名用 <node_name> 表示,接入点的节点名用 <server_name> 表示。为了简单起见,这个架构使用一台服务器作为Tinc认证服务器(即所有设备都需要先连接到这台服务器才能接入Mesh网络),DHCP服务器将部署在这台服务器上。

接入点(认证服务器)

创建网络配置

/etc/tinc/tinc.conf 填入:

创建节点配置

/etc/tinc/<network_name>/hosts/<server_name> 填入:

生成密钥

接受所有默认设置即可。

客户端

创建网络配置

/etc/tinc/tinc.conf 填入:

创建节点配置

/etc/tinc/<network_name>/hosts/<node_name> 填入:

(如果设备在NAT后,不需要填写 Address 字段,并且设置 IndirectData = yes )

生成密钥

接受所有默认设置即可。

交换认证信息

把服务器上的 /etc/tinc/<network_name>/hosts/<server_name> 复制到所有客户端的对应位置,把每个客户端上的 /etc/tinc/<network_name>/hosts/<node_name> 复制到服务器上对应位置。

启动Tinc

测试方式启动:

以服务方式启动:

在Tinc认证服务器上配置RouterOS的DHCP服务器

下载RouterOS CHR

创建差分磁盘镜像

配置网桥

启动QEMU完成初始配置

使用用户名 admin ,密码为空登录,然后配置IP和DHCP:

最后关机

配置QEMU自动启动

/etc/systemd/system/qemu-chr.service 文件中填入

启动服务

配置DHCP

认证服务器上

/etc/network/interfaces.d/<network_name>.cfg 填入:

/etc/network/interfaces.d/bridge0.cfg 填入:

/etc/tinc/tinc-up 填入:

/etc/tinc/tinc-down 填入:

设置脚本权限

客户端上

/etc/network/interfaces.d/<network_name>.cfg 填入:

/etc/tinc/tinc-up 填入:

/etc/tinc/tinc-down 填入:

设置脚本权限

重启所有Tinc服务,应该能DHCP成功了。

让虚拟机里的RouterOS连接互联网

主机配置TAP设备IP

/etc/network/interfaces.d/chr-tap0.cfg填入

然后执行

主机配置IPv4 NAT

(假设互联网连接在 eth0 上)

RouterOS配置路由表


参考资料:

发表评论