用Podman构建家庭网络

2020-07-04 13:21:48

当我刚开始我的职业生涯时,我会在家里创造相当大的实验室环境。我曾经在系统/网络工程部门工作,在那里设置网络、几台虚拟主机和DNS等基本网络服务是一种很有价值的学习方式。

在布鲁克林搬家时,我发现一台ThinkPad正在积灰。这款机顶盒有不错的规格和1TB的固态硬盘。我想让这个坏小子发挥作用。

我决定再建一个实验室,不过要有一些现代气息,而且这个实验室不会增加我的电费。我也想用容器来做这一切。

我将向您简要介绍我们将用于设置此家庭网络的技术堆栈。

CoreDNS-使用大量插件实现名称解析的DNS服务器。

NetData-一个C监控守护进程,它为您能想到的每个指标销毁/proc。

一台调制解调器、一台带有内置交换机和WiFi的路由器,还有这台笔记本电脑,我们称之为";ct-host";,CONTAINER HOST的缩写。该计划是将服务托管在容器中的ct-host上,并通过主机名访问它们。我们稍后会讲到主机名。

+-++-+|笔记本电脑||iPhone|+-+-++-+--+|+-+-++-|局域网。.0/24||CONTAINER-LAN 10.89.0.0/24|+-+CONTAINER+-+。-+|+-^-+|播客运行||+-+-+|+-+CT-HOST+-+||+-+

CT-Host位于两个网络上,一个是我们所有普通设备所在的LAN,另一个是由Linux内核创建的用于在容器之间转发流量的内部或虚拟网络。如果愿意,我们可以将容器端口转发到本地LAN上,从而将容器内的应用程序暴露给本地LAN上的所有其他设备。当然,我们不需要对所有的容器都这样做,因为某些容器可能只需要与其他容器交谈。

我做过太多的工作,你必须打开一张巨大的电子表格才能找到网络上服务的IP地址。这太糟糕了,即使是实验室,我们也可以做得更好。

这是一个问题,尽管..。我也很懒。我不想编写RFC1035区域文件,不想托管古老的BIND服务器,也不想处理复杂的配置。对我来说,HOSTS文件的语法很美。一个将主机名映射到IP地址的简单文本文件非常适合我的需要。

一个特别好的功能是该插件可以获取对主机文件的更改,这意味着您可以就地破解该文件,并且您的DNS服务器将自动为新的A记录提供服务。

一件好事是Podman和SystemD相处得很好。您可以设置容器,使用podman cli生成SystemD服务单元文件,然后像运行systemd服务一样运行容器。允许在引导时自动启动、在故障时重新启动以及对其他容器或服务的启动/停止依赖性。

因为我想利用CoreDNS&34;hosts&34;插件提供的";热重新加载";,所以我决定将CoreDNS配置文件放在";ct-host";上,并将它们挂载到容器中。我创建了目录/etc/tainers/etc.d/coredns,并写出了以下两个文件:

CAT核心文件。:53{向前缓存10。8.8.8.8 9.9.9.9日志错误}ldelossa.net{cache 10 hosts/etc/coredns/hosts{}}cat hosts192.168.185.10 traefik.ldelossa.net192.168.185.10 ct-host.ldelossa.net192.168.185.10 pro.ldelossa.net。

第一个文件Corefile做两件事。首先,它将任何非ldelossa.net的DNS请求转发到Google的DNS服务器,并将结果缓存10秒。其次,它配置要加载的";hosts";插件,并监视/etc/coredns/hosts文件的更改。

第二个文件HOSTS定义在查询映射主机名时CoreDNS服务器将返回的A记录。现在它们都是一样的,都指向";ct-host";,其静态IP为192.168.185.10。稍后会详细介绍这一点。

podman run--network ct-host--name coredns-dt-p 192.168.185.10:53:53/tcp-p 192.168.185.10:53:53/udp-v/etc/tainers/etc.d/coredns:/etc/coredns coredns/coredns-conf/etc/coredns/corefile。

此命令要做的是创建一个运行CoreDNS的容器,将内部端口53(UDP和TCP)映射到本地LAN端口53,并将我们的配置文件装载到容器中。

一旦启动并正常工作,您就可以停止容器,生成一个SystemD服务并在引导时启用它:

您会注意到,本文中没有提到DHCP。不幸的是,我有一个路由器,它不允许我设置我自己的DHCP服务器(poo-poo to you amplifi)。不过,这很好,因为我的设备只需选择加入,并将其DNS服务器设置为192.168.185.10:53即可。

这样做之后,我的设备可以对上面提到的HOSTS文件中找到的任何映射执行主机名解析。随着新服务进入网络,我们只需编辑/etc/tainers/etc.d/coredns/hosts,添加任何我们想要的映射,CoreDNS将为新的A记录提供服务。

这是第1部分,我将向您介绍实验概念并设置基本的主机名解析。

在第2部分中,我们将设置Traefik以将特定主机名重定向并路由到运行在ct-host上的容器,从而只允许我们将关键服务端口转发到本地网络。