我有私有DNS服务器,我想在AWS / EC2上的Debian上用resolv.conf
将它们写入resolvconf
。
名称服务器条目的顺序存在问题。
在我的resolv.conf
中,EC2的默认名称服务器总是写在第一行,如下所示:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.16.0.23
nameserver 10.0.1.185
nameserver 10.100.0.130
search ap-northeast-1.compute.internal
172.16.0.23
是EC2的默认名称服务器,其他人是我的。
如何删除EC2条目?或者,如何将EC2进入第三名?
这里有一个接口文件:
% ls -l /etc/resolvconf/run/interface/
-rw-r--r-- 1 root root 62 Jun 7 23:35 eth0
似乎文件eth0
是由dhcp自动生成的,因此无法永久删除它。
% cat /etc/resolvconf/run/interface/eth0
search ap-northeast-1.compute.internal
nameserver 172.16.0.23
我的私人DNS条目在这里:
% cat /etc/resolvconf/resolv.conf.d/base
nameserver 10.0.1.185
nameserver 10.100.0.130
请帮忙。
答案 0 :(得分:9)
我想我刚刚解决了一个非常类似的问题。我被Amazon EC2糟糕的内部DNS服务器所困扰,所以我想运行一个本地缓存dnsmasq
守护进程并在/etc/resolv.conf
中使用它。起初我刚刚做了echo nameserver 127.0.0.1 > /etc/resolv.conf
但后来我意识到在重启或DHCP租约刷新后,我的更改最终会被DHCP客户端覆盖。
我现在所做的是编辑/etc/dhcp3/dhclient.conf
并取消注释行prepend domain-name-servers 127.0.0.1;
。您应该能够以非常类似的方式使用prepend
指令。
更新:这些说明基于Ubuntu Linux,但我认为一般概念也适用于其他系统,即使其他DHCP客户端也必须具有类似的配置选项。
答案 1 :(得分:5)
我从另一个方向接近这个问题(想要内部名称服务器),我所学到的很多东西都可能是有意义的。
有几个选项可以控制VPC管理控制台中的名称解析。
VPC -> DHCP option sets -> Create dhcp option set
您可以在那里指定自己的名称服务器。 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html 请务必将此dhcp选项集附加到您的VPC以使其生效。
或者(我发现错误)如果在VPC设置中禁用了以下设置,则不会设置本地DNS服务器:
DnsHostnames
和
DnsSupport
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html
也可以在本地覆盖设置(如果您在vpcs之间移动实例,则会注意到这一点)。 /etc/dhcp/dhclient.conf
以下行可能会引起关注:
prepend domain-name-servers
当然,更改会在dhclient start上生效。
答案 2 :(得分:2)
与虚拟私有云(VPC)关联的EC2实例的默认行为是在启动时使用动态主机配置协议(DHCP)请求DNS服务器地址。 VPC使用内部DNS服务器的地址响应DHCP请求。 DHCP响应中返回的DNS服务器地址被写入本地/etc/resolv.conf文件,并用于DNS名称解析请求。重新启动实例后,对resolv.conf文件的任何手动修改都会被覆盖。
要配置运行Linux的EC2实例以使用静态DNS服务器条目,请使用文本编辑器(例如vim)编辑文件/etc/dhcp/dhclient.conf并将以下行添加到文件末尾:>
supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;
The supersede statement
supersede [ option declaration ] ;
If for some option the client should always use a locally-configured value or values
rather than whatever is supplied by the server, these values can be defined in the
supersede statement.
The prepend statement
prepend [ option declaration ] ;
If for some set of options the client should use a value you supply, and then use the
values supplied by the server, if any, these values can be defined in the prepend
statement. The prepend statement can only be used for options which allow more than one
value to be given. This restriction is not enforced - if you ignore it, the behaviour
will be unpredictable.
The append statement
append [ option declaration ] ;
If for some set of options the client should first use the values supplied by the server,
if any, and then use values you supply, these values can be defined in the append
statement. The append statement can only be used for options which allow more than one
value to be given. This restriction is not enforced - if you ignore it, the behaviour
will be unpredictable.
答案 3 :(得分:1)
这就是我们为环境中的服务器所做的工作。
interface "eth0"
{
prepend domain-name-servers 10.x.x.x;
supersede host-name "{Hostname}";
append domain-search "domain";
supersede domain-name "DOMAIN";
}
希望这会有所帮助。
答案 4 :(得分:0)
在这里有人带来解决方案,基本上使用rc.local
替换启动时的文件https://forums.aws.amazon.com/thread.jspa?threadID=74497
- 编辑/ etc / sysconfig / network-scripts / ifcfg-eth0说PEERDNS = no
- 使用您想要的内容创建名为/etc/resolv.backup的文件
- 将以下两行添加到/etc/rc.local:
醇>rm -f /etc/resolv.conf cp /etc/resolv.backup /etc/resolv.conf
答案 5 :(得分:0)
以下内容适用于AWS EC2的Debian扩展。
只需创建/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
:
#!/bin/sh
make_resolv_conf(){
:
}
然后,您可以修改/etc/resolv.conf
,它将在重新启动后保留您的更改。
答案 6 :(得分:-3)
在crontab中设置为
@reboot cp -r /home/.../resolv.conf /etc/resolv.conf