转载自http://zhangzr.com/2018/09/04/DD-WRT/
1 2 3 4 5 6 |
# nvram set rc_startup=" > killall httpd > cd /www > httpd -p 8080 -h /www > " # nvram commit |
nvram具有多层含义。首先它是非可变性RAM(non-volatile RAM)的缩写,这种RAM是一种持久性内存,可在断电时保留数据。路由器内的闪存就是一种nvram。nvram命令用于管理硬件设置,这些设置保存在闪存的最后一块内。这个内存段通常称为“nvram”。nvram命令有不同版本,比如IBM、Cisco、Oracle和Apple版。DD-WRT内的nvram命令非常简单,因为它只是显示和更改分配给变量的颠倒以及删除变量。无选项情况下运行它可以看到选项和参数:
ash shell
1 2 |
root@linksys:~# nvram usage: nvram [get name] [set name=value] [unset name] [show] |
nvram show显示了路由器上的所有设置,而且设置还不少。可以使用less将其分隔为一次一页:
ash shell
1 |
root@linksys:~# nvram show | less |
或是用grep查找特定的变量,比如:
ash shell
1 |
root@linksys:~# nvram show | grep ssh |
例如:如果你无意间禁用了WEB界面,但仍有telnet或SSH,可以以这种方式重新启用它:
ash shell
1 2 3 |
root@linksys:~# nvram set hhtp_enable=1 root@linksys:~# nvram commit root@linksys:~# reboot |
如果想清除任何值的变量可参考如下所示:
ash shell
1 2 |
root@linksys:~# nvram set http_enable="" root@linksys:~# nvram commit |
通常,DD-WRT映像会占据约26MB分区,即便闪存是128MB或更多,也是如此。可以在未使用的空间创建另一个分区并用其来存储文件。这应该主要是读存储(read-storage),比如无线热点splash和配置页、WEB页、额外的配置文件以及面向ipkg(针对嵌入式设备的ItsyPackage Management System)的存储空间。不要将它用于像日志文件这样能生成大量写操作的文件,因为闪存只支持数量有限的写操作并最终会出现故障。现代的闪存相当耐用,但它仍具有有限的写操作生命期限。用这个很好的旧df命令可以看到现有的文件系统:
Optional title
我的路由器具有128MB闪存,那么剩下的那些去哪了呢?它闲置在哪,等着被派上用场。访问Administrator–>Management并检查JFFS2–>Enable和Clean JFFS2–>Enable。单击Apple Setting,继而Reboot Router。当它重启时,应该会看到类似下面的结果:
Optional title
JFFS2(Journalling Flash File System 版本2)是针对闪存存储媒介设计的。我们先来看看这种闪存属于哪种媒介。它是一种特殊的设备,称为Memory Technology Device,缩写为MTD。它不是一种像硬盘和USB棒那样的块设备,也不是像键盘鼠标那样的字符设备。块设备通常以大小固定(512和1024字节)的分区组织而成。而MTD则具有大小为128KB和更大的擦写块(eraseblock)。块设备可以做两件事:读区和写区。MTD可以做三件事:从擦写块读、写到擦写块和擦除擦写块。
紧凑式闪存、SD 卡、USB 棒究其本质都是 MTD。但它们对于操作系统而言更像是块设备,因为它们具有 Flash Translation Layers (FTL),用于在闪存硬件之上模拟块设备。这种 FTL 可以位于主计算机上,也可以位于此设备内的硬件控制器的固件上。如果您愿意牺牲一个 USB 棒(为知识的进步所做的一次伟大的牺牲)并撬开它,那么您很有可能会看到一些 NAND 芯片(原始的闪存芯片)和一个微控制器。
了解有关闪存的几件事情将有助于您的 DD-WRT 探险之旅。第一,NAND 擦写块显示的是全或无(整个块必须在新的数据写上之前先被擦除)。第二,Linux 具有一个 MTD 子系统,和一个用来执行基本任务(比如擦除或向设备写映像)的 mtd 命令。可以在 DD-WRT 上运行无选项的 mtd 命令来查看语法和选项。在 DD-WRT 维基上还可以看到一些关于如何使用 mtd 命令的 how-to 文章,现在您该知道它是怎么回事了吧。第三,nvram 位于最后一个擦写块上,而无论擦写块有多大,它都被以编程的方式限制为 32KB。
通过路由器网页启用JFFS的步骤非常具体。为了避免重置和重新编程路由器,设置备份是明智之举。通过以下步骤在DD-WRT中启用JFFS
1 2 3 4 5 6 7 8 9 |
nvram set jffs_mounted=1 nvram set enable_jffs2=1 nvram set sys_enable_jff2=1 nvram set clean_jffs=1 nvram set sys_clean_jffs2=1 nvram commit reboot # 删除变量请使用如下命令 # nvram unset |
增加1G闪存卡
加入到SD/MMC模式
mkdir /mmc/jffs
mount --bind /mmc/jffs /jffs
nvram set sys_enable_jffs2=1
mkdir /jffs/tmp && mkdir /jffs/tmp/ipkg
添加USB存储设备
首先,要启用USB设备的支持,安装USB驱动,并启动jffs
ash shell
1 2 3 |
mount /dev/scsi/hosts0/bus0/target0/lun0/part1 /mnt mkdir /mnt/jhffs mount /mnt/jffs /jffs |
进入GUI界面“管理–>JFFS2启用” 或者使用CLI命令行nvram set sys_enable_jffs2=1
mkdir /jffs/tmp && mkdir /jffs/tmp/ipkg
测试ipkg
1 2 3 4 |
cd /jffs mkdir -p /jffs/tmp/ipkg ipkg update ipkg list |
建议运行上述命令后重启路由器
Entware是什么?它是嵌入式设备的软件存储库,如路由器或网络附加存储,库中大约有2000个以上的可用程序包。它本身是Optware的替代品。在五年的发展中Entware成了主流,在X86、X64、MIPS、MIPSEL、ARMV5和ARMV7平台有有着很好的应用,并且目前有专门的团队进行维护。
USB设置
/tmp/mnt/sda_part1
,如果正确这里应为/tmp/mnt/opt
打开SSH终端到路由器。使用上面的挂载点链入以下命令
ash shell
1 2 3 4 5 6 7 |
cd /opt wget {link to std install script for your router} (click enter) sh generic.sh (click enter) # 我的路由器是EA6500,Broadcom单核,因此我使用如下地址: cd /opt wget http://bin.entware.net/mipselsf-k3.4/installer/generic.sh (click enter) sh generic.sh |
安装完成,运行更新
ash shell
1 2 |
opkg update (click enter) opkg upgrade (click enter) |
最后一步是将以下命令添加到启动脚本(管理–>命令)。睡眠值可以调整,但对于大多数USB硬件/路由器来说,10是足够长的。
ash shell
1 2 |
sleep 10 /opt/etc/init.d/rc.unslung start |
注意:
http://bin.entware.net/mipselsf-k3.4/Packages.html
,查看全部包信息opkg list
查看包列表在升级DD-WRT固件以前,最好删除Entware驱动或者禁用USB的支持。升级DD-WRT不会给Entware安装带来任何问题,只要开发人员不要更改上面提到的PATH或LD_LIBRARY_PATH变量。升级后只需再次启用USB支持即可。然后打开SSH终端并发出以下命令:
ash shell
1 2 |
opkg update opkg upgrade |
Entware Wiki : https://github.com/Entware/Entware/wiki
在DD-WRT中有三种方法让它们自动运行。
1. 先决条件
2. 操作指南
3. 工作原理
这样做是将您的命令串保存到闪存中的RCL启动变量(也称为NVRAM变量)。由于闪存在启动时不会被擦除,所以你的“startup script”将在每次启动时一直存在,并且总是执行。在命令框中单击“运行命令”按钮。
4. 定制脚本
/tmp/custom.sh
sh /tmp/custom.sh
。追在一个“&”符命令会把它放在后台:sh /tmp/custom.sh &
1. 先决条件
2. 操作指南
ash shell
1 2 3 4 5 6 |
nvram set rc_startup=" |
提交NVRAM命令后,RCL启动变量保存在闪存中,在重新启动时将保留。nvram commit
3. 工作原理
当你发出第一个命令时,你注意到提示符更改为“>”,从这里起,您键入的每一行都被添加到rc_startup变量中。从技术上讲,你仍然在同一个命令行上键入,即使你正在使用多行。当你键入最后一个双引号并点击回车键后,你将看到提示符更改返回,并且已经执行了第一个命令。也就是说,脚本已经添加到变量RCL启动中。
此时,你可以通过发出命令检查RCL启动的内容:~# nvram get rc_startup
4. 自动化的WEB界面
为了自动化或测试Web界面,可以使用免费的IMACROS Firefox
插件。您可以在Web界面中记录和重放你的活动,你可以下载它:
https://addons.mozilla.org/firefox/3863/
简单的nvram脚本适合于短脚本,但是如果你想体大量的工作,或者如果你想轻松地管理启动程序,最好的方法就是使用shell脚本。
Shell脚本使编写长脚本变得更加容易,长脚本又可以从互联网上获取可执行文件或脚本,或安装ipkg -d
内存安装,从闪存分区复制预制的配置文件等,然后才能最终运行程序,并在每次启动时都这样做。
这意味着你不必在路由器闪存空间(nvram,这是相当有限的)中保存那么多的东西,但是您可以替代地填充更流得的RAM,而不必在每次重新启动时手动重新安装和配置程序。
而且,由于每个程序都有自己的脚本,因此在下一次引导中删除程序就如同删除、移动或重命名启动脚本文件一样简单。
1. 先决条件
2. 编写Shell脚本
编写每个程序的shell脚本。脚本以后缀名“*.startup”的文件
shell脚本应该看起来像这样:
ash shell
1 2 3 4 5 6 7 |
#!/bin/sh |
由于DD-WRT系统的设计,你的shell脚本可能最终会定期运行,而不仅权是在引导时运行,这意味着,你需要确保每次只运行1次程序。
killall命令确保不同时运行不止一次。这假设在执行之后立即退出之前出现在脚本中的所有命令(例如cp、wget或iptables)
例如下面脚本举例:kismet_server.startup
ash shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/sh # Make the /tmp/usr/bin folder and move there mkdir /tmp/usr mkdir /tmp/usr/bin cd /tmp/usr/bin #copy the executable file from my home web server wget http://192.168.1.2/kismet_server #kill and previously-running instances of kismet_server killall -q kismet_server #execute kismet_server using /jffs/etc/kismet.conf as the configuration file. /tmp/usr/bin/kismet_server -n -f /jffs/etc/kismet.conf |
3. 保存脚本
在/jffs/etc/config
目录中保存脚本。如果没有你可以创建此目录。
4. 使脚本可执行~ # chmod 700 /jffs/etc/config/
/etc/config/
/jffs/etc/config/
/mmc/etc/config/
/tmp/etc/config/
后缀名 | 解释 |
---|---|
.startup |
将在系统启动、正常启动时间和防火墙配置之前执行 |
.prewall |
每当WAN接口up并在防火墙之前执行 |
.wanup |
每当WAN接口up并在防火墙之后执行 |
.if |
将在任何接口和防火墙之后执行(不再在源代码中,必须删除) |
.ipup |
当PPP连接在断开和防火墙之后重新建立时运行 |
.ipdown |
当PPP连接被关闭时运行。(不再在源代码中,必须删除吗?) |
.sesbutton |
在按下“SES/AOSS/EZ-SETUP”按钮时执行 |
注意:需要使用chmod命令更改脚本的执行权限。当脚本.wanup
启动时,脚本可以运行多次。
参见:http://www.dd-wrt.com/phpBB2/viewtopic.php?p=433984
使用不同扩展名或不同文件夹执行脚本
如果要执行具有不同扩展名的脚本或位于其他文件夹中的脚本,可以创建此脚本。
ash shell
1 2 3 |
for I in `/bin/ls /jffs/etc/config/*.myextension`;do sh $I & done |
在文件夹/jffs/etc/config
下,建立名为samba.startup
脚本
ash shell
1 2 3 |
#!/bin/sh /usr/sbin/smbd -D --configfile=/tmp/smb.conf /usr/sbin/nmbd -D --configfile=/tmp/smb.conf |
没有放在/etc/config下原因这个目录是read-only的
没有放在/tmp/etc/config/的原因为这个目录是临时的,重启之后这个目录里的东西就没了。
假设你安装一个 nginx , 它会在 init.d 目录创建一个名为 S80nginx 的服务脚本(数字可能不一样)。配置上述的脚本以后它会开机启动。但是,如果手动操作这个服务脚本呢?只需要:/opt/etc/init.d/S80nginx start|restart|stop
执行它,给它相应参数即可。
但是,这样做未免太麻烦了。因为不仅仅是 init.d 目录不在 PATH 中,而是每个服务由于优先级的原因命名很麻烦。如果想手动 启动/停止/重启 某个服务还需要记住它的数字,打上大写的 S 也很麻烦。总之,这种手动直接运行服务文件的方式很麻烦。于是,我为了方便管理服务写了一个 lua 脚本,它基于这些服务文件,可以像其他发型版中的 service 一样根据正常服务名称管理服务:
ash shell
1 2 3 4 |
root@DD-WRT:~# ser privoxy restart Shutting down privoxy... done. Starting privoxy... done. root@DD-WRT:~# |
可以看到, ser 管理服务不需要绝对路径,不需要服务文件名,而是以服务应该有的名字(S + 数字之后的部分)。我们在 /opt/bin 目录创建文件 ser :
ash shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/usr/bin/env lua function os.capture(cmd, raw) local f = assert(io.popen(cmd, 'r')) local s = assert(f:read('*a')) f:close() if raw then return s end return string.sub(s, 0, string.len(s) - 1) end PATH = '/opt/etc/init.d/' function handler(s_name, operation) local out = os.capture('ls ' .. PATH, false) local flag = false for s in string.gmatch(out, '%S+') do local prefix = string.match(s, '^S%d+') if prefix then local service_name = string.sub(s, string.len(prefix) + 1) if service_name == s_name then print(os.capture(PATH .. s .. ' ' .. operation)) flag = true end end end if not flag then print('No service: ' .. s_name) end end handler(arg[1], arg[2]) |
添加执行权限:chmod +x /opt/bin/ser
后就可以使用它了。当然,由于它是一个 lua 脚本,你需要安装 lua :opkg install lua
这样子管理服务就方便得多了
通过Entware安装的软件在 /opt/etc/init.d 下生成了服务脚本,它仍然在开关机时不会得到执行。
我们可以基于 DD 提供的 ‘Commands’ 功能做到这一点:
1. 创建相关目录(启用 jffs 的目的是用来存放这些固定的永久储存的东西):
ash shell
1 2 3 4 5 |
cd /jffs mkdir scripts cd scripts mkdir shutdown mkdir startup |
2. 在 scripts 目录创建 operator.sh 脚本(控制 shutdown 目录或者startup 目录的脚本执行):
ash shell
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/usr/bin/env sh SCRIPTS_HOME=/jffs/scripts run_all(){ for SCRIPT in "$SCRIPTS_HOME"/"$1"/*; do if [ -f "$SCRIPT" -a -x "$SCRIPT" ] then $SCRIPT fi done } run_all "$1" |
3. 在 startup 目录分别创建 S10service 和 S30swapon:
ash shell
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/sh RC='/opt/etc/init.d/rc.unslung' i=30 until [ -x "$RC" ] ; do i=$(($i-1)) if [ "$i" -lt 1 ] ; then logger "Could not start Entware" exit fi sleep 1 done $RC start |
ash shell
1 2 3 4 5 6 |
#!/bin/sh # Turn On Usage Of Swapfile if [ -f "/opt/swapfile" ];then swapon /opt/swapfile echo "Turning Swapfile On" fi |
它们分别是启动 init.d 中的服务和启用 swap (交换空间)的脚本。
4. 设置开/关机执行脚本
路由器 WEB UI -> Tag: Administration - Commands , 分别添加以下两个命令,先后保存为 Startup 和 Shutdown :/jffs/scripts/operator.sh startup
/jffs/scripts/operator.sh shutdown
其实就是开机执行 operator.sh 脚本添加 startup 参数 和 关机执行 operator.sh 添加 shutdown 参数。而 operator.sh的流程其实就是遍历参数目录(例如 startup 和 shutdown)中所有的脚本并且依次执行。如果你看明白了,就会知道只要将脚本放进 startup 目录它就会开机执行,只要放进 shutdown 它就会关机时执行。
有关脚本执行顺序需要特意说明一下,这是我的目录结构:
ash shell
1 2 3 4 5 6 7 8 9 |
root@DD-WRT:/jffs/scripts# tree -L 3 . |-- operator.sh |-- shutdown | |-- S10service | `-- S30swapoff `-- startup |-- S10service `-- S30swapon |
可以注意到,开机执行的脚本都是以 S + 数字 +名称来命名的。这样做的目的是方便遍历时排序,数字低的会被先遍历并执行,也就是根据命名做到了启动优先级。至于前缀的大写字母 S 可以用其他字母替代,但是要统一。是否后缀 .sh 也无所谓。其实这里我就是模仿的 init.d 里边的服务命名方式,因为它们就是用这种方式决定启动优先级的。这样做了以后,就在路由器固件原生不内置相关功能的情况下做到了一样的效果。安装的所有服务可以正常开机启动,并且可以自己添加任意的脚本让它们自动执行。(例如从上面的文件中可以看出来,我还在关机时运行了两个脚本)
dd-wrt配置
服务–>服务–>DNSMasq 启动
服务–>服务–>本地DNS 启动
dnsmasq会自动读取/tmp/hosts
文件,重启后/tmp
中的内容将会重置。因此建议开启jffs,并指定hosts,在Additional DNSMasq Options中填写
1 |
addn-hosts=/jffs/dnsmasq.hosts |
也可以设置不读取resolv.conf文件,直接在dnsmasq中设置dns服务器,在Additional DNSMasq Options中填写
1 2 3 |
no-resolv server=8.8.8.8 server=8.8.4.4 |
还可以将某个域名提交给指定的dns服务器解析,在Additional DNSMasq Options中填写
1 2 |
server=/.google.com/208.67.222.222#443 server=/.google.com.hk/208.67.222.222#443 |
如果Additional DNSMasq Options里的内容太多,也可指定一个目录来读取这些配置信息
1 |
conf-dir=/opt/etc/dnsmasq.d |
Dnsmasq提供DNS缓存和DHCP服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存DNS计法度来提高对访问过的网址的连接速度。作为DHCP服务器,dnsmasq可以用于为局域网电脑分配内网IP地址和提供路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络,此外它还自带了一个PXE服务器。
智能DNS加快解析速度,打开/etc/dnsmasq.conf文件,server=后面添加指定DNS,例如国外不同网站使用不同的DNS
1 2 3 4 5 6 7 |
# 国内指定DNS server=/cn/114.114.114.114 server=/taobao.com/114.114.114 server=/taobaocdn.com/114.114.114 # 国外指定DNS server=/google.com/8.8.8.8 server=/youtube.com/8.8.8.8 |
屏蔽网页广告,将指广告的URL指定127这个IP,就可以将网页上讨厌的广告去掉了。
1 2 |
address=/ad.youku.com/127.0.0.1 address=/ad.iqiyi.com/127.0.0.1 |
指定域名解析到特定的IP上。这个功能可以让你控制一些网站的访问,非法的DNS就经常把一些正规的网站解析到不正确的IP上。
1 |
address=/freehao123.com/123.123.123.123 |
管理控制内网DNS,首先将局域网中的所有的设备的本地DNS设置为已经安装的Dnsmasq的服务器IP地址。然后修改已经安装Dnsmasq的服务器Hosts文件:/etc/hosts
,指定域名琶特定的iP中。例如想让局域网的所有用户访问www.freehao123.com时跳转到192.168.0.2,添加:192.168.0.2 www.freehao123.com在Hosts文件中既可,整个过程也可以说是“DNS劫持”。
dnsmasq先去解析hosts文件,再去解析/etc/dnsmasq.d/下的*.conf文件,并且这些文件的优先级要高于dnsmasq.conf,我们自定义的resolv.dnsmasq.conf中的DNS也被称为上游DNS,这是最后去查询解析的;
如果不想用hosts文件做解析,我们可以在/etc/dnsmasq.conf中加入no-hosts这条语句,这样的话就直接查询上游DNS了,如果我们不想做上游查询,就是不想做正常的解析。我们就可以加入no-reslov这条语句。
编辑dnsmasq的配置文件/etc/dnsmasq.conf
。这个文件有大量的选项注释。
具体参数 | 参数说明 |
---|---|
resolv-file | 定义dnsmasq从哪里获取上游DNS服务器地址,默认从/etc/resolv.conf获取。 |
strict-order | 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止 |
listen-address | 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。 |
address | 启用泛域名解析,即自定义解析a记录,例如:address=/long.com/192.168.115.10访问long.com时的所有域名都会被解析成192.168.115.10 |
bogus-nxdomain | 对于任何被解析到此的IP域名,将响应NXDOMAIN使其解析失效,可以多次指定。通常用于对于访问不存在的域名,禁止其跳转到运营商的广告站点 |
server | 指定使用哪个DNS服务器进行解析,对不不同的网站可以使用不同的域名对应解析。例如:server=/google.com/8.8.8.8 #表示对于google的服务,使用谷歌的DNS解析。 |
1 2 |
[root@localhost~]# dnsmasq --test dnsmasq: syntax check OK. |
要在单台电脑上以守护进程方式启动dnsmasq做DNS缓存服务器,编辑/etc/dnsmasq.conf,添加监听地址:
1 |
listen-address=127.0.0.1 |
如果用此主机为局域网提供默认DNS,请为该主机绑定固定IP地址,设置
1 |
listen-address=192.168.x.x |
多个IP地址设置:
1 |
listen-address=127.0.0.1, 192.168.x.x |
linux处理DNS请求时有个限制,在resolv.conf中最多只能配置三个域名服务器(nameserver)。作为一种变通方法,可以在resolv.conf文件中只保留localhost作为域名服务器,然后为外部域名服务器另外创建resolv-file文件。首先,为dnsmasq新建一个域名解析文件:
1 2 3 4 |
[root@localhost~]# vim /etc/resolv.dnsmasq.conf # Google's nameservers, for example nameserver 8.8.8.8 nameserver 8.8.4.4 |
然后编辑/etc/dnsmasq.conf让dnsmasq使用新创建的域名解析文件:
1 2 3 |
[root@localhost~]# vim /etc/dnsmasq.conf ... resolv-file=/etc/resolv.dnsmasq.conf |
dhcpcd可以通过创建(或编辑)/etc/resolv.conf.head
文件或/etc/resolv.conf.tail
文件来指定dns服务器,使/etc/resolv.conf
不会被每次都被dhcpcd重写。echo "nameserver 127.0.0.1" > /etc/resolv.conf.head 设置dns服务器为127.0.0.1
要使用dhclient,取消/etc/dhclient.conf
文件中如下行的注释:prepend domain-name-servers 127.0.0.1;
NetworkManager可以靠自身配置文件的设置项启动dnsmasq。在NetworkManager.conf文件的[main]节段添加dns=dnsmasq
配置语句,然后禁用由systemd启动的dnsmasq.service:
1 2 3 4 |
[root@localhost ~]# vim /etc/NetworkManager/NetworkManager.conf [main] plugins=keyfile dns=dnsmasq |
可以在/etc/NetworkManager/dnsmasq.d/
目录下为dnsmasq创建自定义配置文件。例如,调整DNS缓存大小(保存在内存中):
1 2 |
[root@localhost~]# vim /etc/NetworkManager/dnsmasq.d/cache cache-size=1000 |
dnsmasq 被 NetworkManager 启动后,此目录下配置文件中的配置将取代默认配置。
IPv6
启用 dnsmasq 在 NetworkManager 可能会中断仅持IPv6的DNS查询 (例如 dig -6 [hostname]) 否则将工作。 为了解决这个问题,创建以下文件将配置 dnsmasq 总是监听IPv6的loopback:
1 2 |
[root@localhost ~]# vim /etc/NetworkManager/dnsmasq.d/ipv6_listen.conf listen-address=::1 |
此外, dnsmasq不优先考虑上游IPv6的DNS。不幸的是NetworkManager已不这样做 (Ubuntu Bug)。 一种解决方法是将禁用IPv4 DNS的NetworkManager的配置,假设存在。
其他方式
另一种选择是在NetworkManagers“设置(通常通过右键单击小程序)和手动输入设置。设置将取决于前端中使用的类型;这个过程通常涉及右击小程序,编辑(或创建)一个配置文件,然后选择DHCP类型为“自动(指定地址)。”DNS地址将需要输入,通常以这种形式:127.0.0.1, DNS-server-one, ….
dnsmasq默认关闭DHCP功能,如果该主机需要为局域网中的其他设备提供IP和中由,应该对dnsmasq配置文件(/etc/dnsmasq.conf
)必要的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@localhost~]# vim /etc/dnsmasq.conf # Only listen to routers' LAN NIC. Doning so opens up tcp/udp port 53 to # localhost and udp port 67 to world: interface= |
查看租约
1 |
[root@localhost~]# cat /var/lib/misc/dnsmasq.leases |
它可以将一个自定义域添加到主机中的(本地)网络:
1 2 |
local=/home.lan/ domain=home.lan |
设置开机启动:
1 |
[root@localhost~]# systemctl enable dnsmasq |
立即启动dnsmasq:
1 |
[root@localhost~]# systemctl start dnsmasq |
需要重启网络服务以使DHCP客户端重建一个新的/etc/resolv.conf,查看dnsmasq是否启动正常,查看系统日志:
1 |
[root@localhost~]# joumalctl -u d |
/etc/dnsmasq.conf
详解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 |
# 不加载本地的/etc/hosts文件 #no-hosts # 添加读取额外的hosts文件路径,可以多次指定。如果指定为目录,则读取目录中的所有文件。 #addn-hosts=/etc/dnsmasq.hosts.d # 读取目录中的所有文件,文件更新将自动读取 #hostsdir=/etc/dnsmasq.hosts.d # 例如,/etc/hosts中的os01将扩展成os01.example.com #expand-hosts # 缓存时间设置,一般不需要设置 # 本地hosts文件的缓存时间,通常不要求缓存本地,这样更改hosts文件后就即时生效 #local-ttl=3600 # 同local-ttl仅影响DHCP租约 #dhcp-ttl= |