草庐IT

Ubuntu 18.04 搭建 DHCP 服务

云计算-Security 2023-04-09 原文


目录

前言

最近在公司进行边缘服务器的部署工作,借此机会和大家交流一下部署中的一个技术环节——DHCP 服务器的搭建,为什么要多此一举搭建这个服务呢,用现成的他不香吗?其实,这个取决于你的实际应用场景,如果你部署的边缘服务器是批量的,你是怎么识别每台边缘服务器的 IP 呢,可能你会想到使用一些内网 IP 扫描工具来进行扫描,但是我们是以动态的方式来获取 IP 的,如果你的客户端服务器重启,那你的 IP 可能就会发生变化,即便通过搭建内网 DNS 的方式也需要明确你的客户端服务器的 IP,以及这个 IP 所对应的服务器跑的应用程序,那你的内网 DNS 才有意义。本文将介绍如何部署 DHCP 服务、如何通过 MAC 来绑定具体 IP。

一、基本概念

1.1 DHCP 协议

来自百度百科的解释

DHCP(Dynamic Host Configuration Protocol),即动态主机配置协议,是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的 IP 地址和子网掩码。默认情况下,DHCP 作为 Windows Server 的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。

1.2 IP 分配方式

1、手动分配

手动分配 IP 的分配方式是需要 DHCP 服务器管理员来具体定制的。

2、自动分配

自动分配 IP 的分配方式是在客户端从 DHCP 获取一个 IP 后,就会永久使用这个 IP 地址。

3、动态分配

动态分配 IP 的分配方式的话就很好理解,也就是客户端从 DHCP 获取一个 IP 后,并不会永久使用该 IP 地址,而是以租约的方式动态获取 IP 地址,如果租约到期则会释放该 IP 地址而供其他客户端使用。

二、部署规划

OS应用备注
Ubuntu18.04(192.168.136.130)DHCP服务端
Ubuntu18.04(192.168.136.x)-客户端
-客户端

注:DHCP_Server 和 DHCP_Client 须处于同一个局域网内。

三、DHCP 部署

3.1 动态获取 IP

1、安装 DHCP Server

sudo apt install -y isc-dhcp-server

2、配置 DHCP Server 静态 IP

目的是为了 DHCP Server 的 IP 不发生变化,便于向其他客户端提供稳定服务。

# 安装 Netplan
sudo apt install -y netplan.io

# 修改配置文件
sudo vim /etc/netplan/01-xxxx.yaml
network:
  ethernets:
        ens33:
            dhcp4: no
            dhcp6: no
            addresses: [192.168.136.130/24]
            gateway4: 192.168.136.2
            nameservers:
                    addresses: [114.114.114.114,8.8.8.8]
  version: 2

# 应用配置(使其生效)
sudo netplan apply

3、配置 DHCP Server

sudo vim /etc/dhcp/dhcpd.conf
# 全局配置(若局部配置没设置则以全局配置为准)
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

ddns-update-style none;

...
# 局部配置(若局部配置已设置则以局部配置为准)
subnet 192.168.136.0 netmask 255.255.255.0 {         # 定义网络地址和子网掩码
       range 192.168.136.132 192.168.136.135;        # 指定IP地址池的范围
       option domain-name "zrs.com";                 # 域(比如访问www,就会自动补齐www.zrs.com)
       option domain-name-servers 192.168.136.130;   # DNS服务器(自建的DNS或所在地区的DNS)
       option subnet-mask 255.255.255.0;             # 子网掩码
       option routers 192.168.136.2;                 # 网关IP
       option broadcast-address 255.255.255.0;       # 广播地址
}
...

4、重启 DHCP Server

sudo systemctl restart isc-dhcp-server  # 启动
sudo systemctl enable isc-dhcp-server   # 开机自启
sudo systemctl status isc-dhcp-server   # 查看启动状态

5、客户端如何获取 IP ?

DHCP 服务器搭建好后,启动 DHCP_Client(客户端),向客户端发出请求,最后服务端响应客户端的请求并给客户端动态分配 IP 地址,具体的原理这里不做介绍,大家可以自行查阅一下相关资料。下图为动态获取 IP 的结果验证:

3.2 自动获取 IP

在以上基础上,只需修改一下 DHCP 服务的配置即可实现 MAC-IP 的形式获取 IP 地址。

1、先获取客户端 MAC 地址

2、修改 DHCP Server 配置文件

sudo vim /etc/dhcp/dhcpd.conf
# 全局配置(若局部配置没设置则以全局配置为准)
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

ddns-update-style none;

...
# 局部配置(若局部配置已设置则以局部配置为准)
subnet 192.168.136.0 netmask 255.255.255.0 {         # 定义网络地址和子网掩码
       range 192.168.136.132 192.168.136.135;        # 指定IP地址池的范围
       option domain-name "zrs.com";                 # 域(比如访问www,就会自动补齐www.zrs.com)
       option domain-name-servers 192.168.136.130;   # DNS服务器(自建的DNS或所在地区的DNS)
       option subnet-mask 255.255.255.0;             # 子网掩码
       option routers 192.168.136.2;                 # 网关IP
       option broadcast-address 255.255.255.0;       # 广播地址
}
host ubuntu-app {
     hardware ethernet 00:0c:29:1a:74:a1;
     fixed-address 192.168.136.134;
}
# 说明
# 08:00:07:26:c0:a5:这是客户端服务器的MAC地址(即我们所说的物理地址)
# 192.168.136.133:这是我指定的IP地址(即这个MAC地址的服务器固定使用这个IP地址)

3、重启 DHCP Server

sudo systemctl restart isc-dhcp-server

接下来启动客户端,该客户端就会获得指定的 IP 地址。

注:不过要注意,在指定 IP 地址的时候,要确保这个 IP 没被其他客户端占用,否则会发生冲突,在指定之前可以先扫描一下所在内网 IP 的存活状态。

4、验证

下图可看到,通过客户端 MAC 指定的固定 IP 已实现。

总结

以上就是关于 DHCP 服务的部署,以及客户端 IP 地址获取的方式配置,经过实际测试验证,最终实现了动态&&自动获取 IP 地址。如果大家实在本地虚拟机(如VMware),需要勾掉本地 DHCP 服务,以免对实验造成影响。

<点击跳转至开头>

有关Ubuntu 18.04 搭建 DHCP 服务的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - Rails 3 I18 : translation missing: da. datetime.distance_in_words.about_x_hours - 2

    我看到这个错误:translationmissing:da.datetime.distance_in_words.about_x_hours我的语言环境文件:http://pastie.org/2944890我的看法:我已将其添加到我的application.rb中:config.i18n.load_path+=Dir[Rails.root.join('my','locales','*.{rb,yml}').to_s]config.i18n.default_locale=:da如果我删除I18配置,帮助程序会处理英语。更新:我在config/enviorments/devolpment

  5. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  6. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  7. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  8. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  9. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  10. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

随机推荐