二维码

将带有Google身份验证器的FreeRADIUS迁移到Docker容器

2830 人阅读 | 时间:2018年12月01日 23:37

我的双节点ESXi群集中的虚拟机数量正在增长,如果我不进行更改,我的32GB RAM Intel NUC ESXi版本将很快内存。也就是说,我必须找到一种方法来减少我的RAM使用量,以便从这个版本中挤出更多。我不想在另一个版本上花费几千美元。我正在研究的ESXi版本包含带有Intel Xeon D-1541和128GB ECC RDIMM RAM的Supermicro X10SDV-TLN4F-O主板,这是一种昂贵的ESXi版本。是的,我可以在eBay上以较少的价格购买二手服务器,但我不想要那些服务器,因为它们太笨重而且响亮。

更新使用Google身份验证器进行双因素身份验证的FreeRADIUS 3.0

输入Docker

什么是Docker?Docker是一个开源软件平台,允许用户将软件打包到容器中,允许它们在不同的操作系统(Windows,Linux和macOS)之间移植。

这是一段十分钟的视频,进一步解释了Docker的用途。如果你想观看一小时的视频,这里有一个来自Docker,Inc。的视频

目前,我有三个VM为FreeRADIUS和tac_plus(TACACS +守护进程)运行Ubuntu服务器版本。最重要的是,我计划为Pi-hole设置另一个VM(现在将其作为Docker容器运行)。当然,我可以轻松地将它安装在我现有的一个虚拟机上,但我想要分离。使用Docker,我可以很容易地获得所需的所有分离,但系统资源更少,使用效率更高。

我的Ubuntu服务器基础VM具有以下分配的资源:256MB RAM,1 x vCPU和8GB磁盘空间。根据我想要对新VM执行的操作,我可以更改分配给它的资源。如果我为它分配的内存太少,那么VM将使用该磁盘来获得额外的内存。交换不理想,所以我通常添加更多的RAM,这意味着将有一些空闲的RAM等待使用。

使用Docker,我可以为安装了Docker的Ubuntu VM分配1GB的RAM,而不用担心它的有效使用。我知道最终,系统将使用资源,因为我继续添加更多容器。如果VM开始交换,我可以轻松添加更多RAM。

Docker的另一个优点是旋转新容器的速度。使用VM,我需要克隆基本映像,创建VMX文件,打开它等等。这些过程需要几分钟。使用Docker,我可以编写一个单行的Dockerfile来创建Docker镜像并启动容器。与在创建VM时必须执行的进程所花费的分钟数相比,启动容器所需的时间不到一秒。

Docker安装

如果你是回访者,你可能已经知道我使用的是Ubuntu。话虽如此,Docker镜像将使用Ubuntu作为操作系统。安装可能是一个单行,但我想安装最新版本。Docker有如何操作指南,所以如果你愿意,可以按照说明操作。虽然,我仍会列出自从我跳过一步之后所做的所有事情。


Docker撰写安装

在下一节中,我们将安装Docker Compose虽然这是可选的,但我喜欢Docker编写,因为它使我更容易在一个命令中运行多个容器。


FreeRADIUS Docker Image

Docker Hub上有很多FreeRADIUS Docker镜像  ,但我想学习如何自己创建一个。话虽如此,我读了几个网站,包括Docker的文档页面,以了解如何创建自己的图像。我花了好几次尝试让我的FreeRADIUS Docker镜像工作,因为我毕竟是一个Docker新手。

编写Dockerfile


当我准备编写我的Docker文件时,我遇到的一个问题是我在哪里放置它。为了测试,我决定在我的主目录中创建一个目录,并放置与此Docker镜像相关的所有文件。然后我切换到新目录并在那里创建了我的Dockerfile。将来,我仍然会为了分离而创建一个新目录。但是,将Dockerfile放在哪里并不重要。

一旦我运行VIM,我开始编写我的Dockerfile。起初,由于我没有使用Ubuntu Docker镜像,因此我只开始使用几行。我想确保我可以运行我需要放入Dockerfile的所有命令。一旦所有东西都在容器中工作,我就开始编写其余部分了。这是我写的完整Dockerfile。

我指示Docker引擎复制现有FreeRADIUS文件的行,这些文件基于我过去的博客文章中介绍的配置。如果您对配置文件感到好奇,请查看此帖文章我可以从现有的RADIUS服务器复制所有内容,但我想展示编写Dockerfile的其他方法以及如何编辑配置文件。

构建Docker镜像

完成Dockerfile之后,下一步就是构建Docker镜像。创建Docker镜像非常简单。我们只需要发出build命令,它将根据我们编写的Dockerfile创建Docker镜像。本 牛逼  标志使我们能够与一个友好的名称标记泊坞窗图像。

如果我们不使用友好名称标记图像,它将看起来像这样。

如果Dockerfile中存在错误,则不会构建映像。Docker引擎很好地告诉用户它失败的地方。这是一个我从Dockerfile中取出一些代码的例子。

如果没有错误,它应该如下所示。此处创建的映像来自修改后的Dockerfile,我在其中排除了COPY命令,因为我在此VM中没有这些文件。


验证

要在我们的系统中查看Docker镜像,请发出以下命令。请注意,有一个Ubuntu图像。这是 来自Dockerfile 的 FROM ubuntu 16.04行的结果。


Docker撰写

我们现在准备运行Docker镜像了。我们可以发出 docker run  命令,但是,我喜欢使用Docker Compose运行Docker镜像在本节中,我们将写什么,我们需要为我们的 搬运工撰写.yml  文件运行多克尔图像。YML文件不需要位于radius目录中。就我而言,我只是把我的文件放在我的主目录中。但请记住,当您运行 docker compose  命令时,它将查找YML文件。确保在存储YML文件的目录中运行该命令。


端口

在本节中,我包含了一个IP地址。默认情况下,容器将使用主机的IP地址。如果想要使用默认IP地址,那么该行看起来像 “1812:1812 / udp” 在这种情况下,我想使用与主机不同的IP地址。这将允许我使用相同的端口创建另一个Docker容器。由于主机没有为其分配此特定IP地址,因此我们需要将主机设置为具有另一个IP地址(IP别名)。编辑网络接口配置意味着我们希望即使在重新启动后更改也是持久的。我想我不需要别名部分中的其他行,因为它将使用主界面配置。但是,为了以防万一,我仍然将它包含在配置中。


在我验证FreeRADIUS Docker容器中的所有内容时,我注意到即使在使用正确的时区设置环境后,时间也不正确。在我的搜索过程中,我遇到了一个讨论如何正确设置时区的线程。有几种方法可以做到,但我这样解决了。使用此配置,容器将与主机的时间同步。话虽如此,主机需要与NTP服务器同步。拥有正确的时间非常重要,因为我的Google身份验证器是基于TOTP的。

启动容器

完成YML文件后,我们现在可以使用docker compose  命令运行我们的映像了 的 d  标志指示多克尔发动机运行容器(一个或多个)作为后台进程。


停止容器

如果由于某种原因,您想要停止容器,则可以发出 docker stop  命令。


最后的话

我的FreeRADIUS Docker图像绝不是完美的。我仍然是Docker新手,所以我很确定如果Docker专家看到我的Dockerfile会有一些评论。但是,我已经用我的PA-200对它进行了测试,它运行得很好。

使用Docker,它将允许我关闭在ESXi主机上运行的多个VM。最重要的是,我现在能够快速启动新服务,而无需通过我用来创建Ubuntu作为操作系统的新VM的过程。


取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
关闭广告
关闭广告
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×