Linux系统的服务器的DNS相关配置
运行环境redhat 90 ,IP地址1721812135,实现的域名为
1安装DNS所要的软件包
查看是否安装bind软件,在终端中输入
代码如下:
[root@localhost root]# rpm -qa|grep bind
redhat-config-bind-190-13
bind-921-16
bind-utils-921-16
ypbind-111-4
若出现以上的文字则表示安装成功,若没有出现以上东西插入正确的光盘,进行安装或者通过下载源代码进行安装。
2设定好IP地址与DNS
在终端中输入netconfig,回车,在第一行中输入IP,1721812135第二行输入子网掩码2552552550第三行输入网关地址:172181211,最后一行输入DNS 1721812135再确定再在终端中输入下面的命令
代码如下:
[root@localhost root]#service network reload
[root@localhost root]#service network restart
通过ifconfig查看IP信息
3配置DNS
配置DNS正向搜索,配置文件如下:
代码如下:
[root@localhost root]#cp /var/named/localhostzone /var/named/
先复制本机DNS的一个配置模板文件,进行修改
代码如下:
[root@localhost root]# vi /var/named/
$TTL 86400
$ORIGIN
@ 1D IN SOA root (
42 ; serial (d adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
1D IN NS @
1D IN MX 5 mail
www 1D IN A 1721812135
mail 1D IN A 1721812135
ftp 1D IN A 1721812135
pop3 IN CNAME mail
smtp IN CNAME mail
保存退出,先按ESC ,再:wq
配置DNS正向搜索,配置文件如下:
代码如下:
[root@localhost root]#cp /var/named/namedlocal /var/named/17218121rev
先复制本机DNS的一个配置模板文件,进行修改
代码如下:
[root@localhost root]# vi /var/named/17218121rev
$TTL 86400
@ IN SOA root (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS
p35 IN PTR www
35 IN PTR mail
35 IN PTR ftp
配置本机DNS的一个主文件,安装好后它有一个模板,修改它,修改的部分是粗线表示
代码如下:
[root@localhost root]# vi /etc/namedconf
// generated by named-bootconfpl
options {
directory "/var/named";
/
If there is a firewall between you and nameservers you want
to talk to, you might need to uncomment the query-source
directive below Previous versions of BIND always asked
questions using port 53, but BIND 81 uses an unprivileged
port by default
/
// query-source address port 53;
};
//
// a caching only nameserver config
//
controls {
inet 127001 allow { localhost; } keys { rndckey; };
};
zone "" IN {
type hint;
file "namedca";
};
zone "localhost" IN {
type master;
file "localhostzone";
allow-update { none; };
};
zone "00127in-addrarpa" IN {
type master;
file "namedlocal";
allow-update { none; };
};
zone ""IN{
type master;
file "";
};
zone "12118172in-addrarpa"IN{
type master;
file "17218121rev";
};
include "/etc/rndckey";
"/etc/namedconf" [已转换] 45L, 894C
配置本机的域名转换程序的顺序
代码如下:
[root@localhost root]# vi /etc/hostconf
order bind,hosts
multi off
trim
[root@localhost root]# vi /etc/resolvconf
nameserver 1721812135
nameserver 218196422
namedsever 218196422
domain
search www
option nochecknames rotate
4启动named服务
代码如下:
[root@localhost root]#service named start
5检查配置是否成功
代码如下:
[root@localhost root]# nslookup
Note: nslookup is deprecated and may be removed from future releases
Consider using the `dig' or `host' programs instead Run nslookup with
the `-sil[ent]' option to prevent this message from appearing
www
Server: 1721812135
Address: 1721812135#53
Name: www
Address: 1721812135
1721812135
Server: 1721812135
Address: 1721812135#53
3512118172in-addrarpa name = ftp
3512118172in-addrarpa name = www
3512118172in-addrarpa name = mail
ctrl +D退出
若出现上面的情况的文字表示已经配置成功
6其实在配置的过程中,查看自己是否配置正确可以通过named –g 进行查看你的配置文件到底错在那个地方,再进行修改
PS:DNS相关配置文件说明
/etc/hostconf
当系统中同时存在DNS域名解析和/etc/hosts主机表机制时,由该/etc/hostconf确定主机名解释顺序。示例:
order hosts,bind #名称解释顺序
multi on #允许主机拥有多个IP地址
nospoof on #禁止IP地址欺骗
order是关键字,定义先用本机hosts主机表进行名称解释,如果不能解释,再搜索bind名称服务器(DNS)。
/etc/resolvconf
该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数。resolvconf的关键字主要有四个,分别是:
nameserver #定义DNS服务器的IP地址
domain #定义本地域名
search #定义域名的搜索列表
sortlist #对返回的域名进行排序
/etc/resolvconf的一个示例:
domain ringkeecom
search wwwringkeecom ringkeecom
nameserver 2029612886
nameserver 20296128166
最主要是nameserver关键字,如果没指定nameserver就找不到DNS服务器,其它关键字是可选的。
/etc/hosts
设置IP地址与主机名对应表,可用该文件来进行主机名称解释。如:
#格式:IP地址 主机名 别名
代码如下:
127001 localhost localhostlocaldomain
19216811 debian debian
19216802 t02 t02tiger
19216804 t04 t04tiger
/etc/nameconf
// generated by named-bootconfpl
poptions {
directory "/var/named";
/
If there is a firewall between you and nameservers you want
to talk to, you might need to uncomment the query-source
directive below Previous versions of BIND always asked
questions using port 53, but BIND 81 uses an unprivileged
port by default
/
// query-source address port 53;
};
p//
// a caching only nameserver config
//
pzone "" IN {
type hint;
file "namedca";
};
pzone "00127in-addrarpa" IN {
type master;
file "namedlocal";
allow-update { none; };
};
这一部分是你安装了bind软件后系统自动产生的namedconf文件的原始内容。“directory”指定了dns记录文件的存放目录是/var/named。“//”开头的文字是说明文字,不用管它。接着的两个“zone”语句定义了dns服务器的根和对应的反向查询域,并指出根的记录文件是“nameca”,根的反向查询域的记录文件是“namedlocal”。这两个记录文件也是系统自带的,不用去改动它。namedconf文件的这一部分内容,我们不必去改动它。
但我们可以在“diretory”下添加一行:forwarders {20296134133;}。20296134133是我这里电信的dns服务器的地址,forwarders参数指明了其后的ip所在的服务器作为备选的dns服务器。也就是说,把本机的dns不能解析的主机发送到这个备选的dns服务器上,让它来进行解析。
代码如下:
zone "" IN {
type master;
file "named";
allow-update { none; };
};
zone "0010in-addrarpa" IN {
type master;
file "namedrev";
allow-update { none; };
};
这一部分是手工添加的。定义了“”这个域和对应的反向查询域。“type master”说明本机是“”和“0010in-addrarpa”这两个域的主dns服务器(primary name server)。“named”和“namedrev”是域的记录文件。这两个文件也是自己创建的,下面我们就来看看这两个文件。
/var/named/naemdcom
资源记录文件,位于/var/named目录下。这个目录是namedconf中定义的。
1、named文件内容如下:
代码如下:
@ IN SOA netfinity rootnetfinity (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS netfinity
IN MX 10 netfinity
pnetfinity IN A 1000211
lily IN A 1000139
www IN CNAME netfinity
pop3 IN CNAME netfinity
smtp IN CNAME netfinity
在这个记录文件中,出现了5种类型的记录。SOA 是授权起始(Start Of Authority)的缩写,后面接着写你的dns服务器的主机名,这里是“netfinity”。(注意,主机名称后面的小圆点。凡是出现在记录文件了的主机名,记得都要加上这各小圆点。)NS 是名称服务器资源记录,指明域中的名称服务器,这里就是dns服务器。MX是邮件交换者资源记录,指明这个域的邮件服务器。你可以写多个MX记录,指明多个邮件服务器,优先级别由MX后的数字决定,数字越小,邮件服务器优先权越高。A是主机记录,把主机和ip地址对应起来。CNAME是别名记录,它赋予一个主机不同的名称,如www、pop3其实都是指向同一台主机netfinity。
/var/named/naemdcomrev
namedrev文件内容:
代码如下:
@ IN SOA netfinity rootnetfinity (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS netfinity
211 IN PTR netfinity
139 IN PTR lily
这是“”的反向域记录文件,它让dns服务器提供由ip地址查找主机名的服务。PTR记录把ip和主机名对应起来。由于一些程序会要求反向查询,所以反向查询域的记录文件最好不要省略。
到此为止,你已经成功配置了一个dns服务器,它能够解析“”这个域了。
不是。
在版之前,BIND名称服务器并没有实现更新转发。因此,当使用低于910版的BIND名称服务器时,确保将更新直接发送至所要更新区域的primary名称服务器是非常重要的。要做到这一点,请确定该区域SOA记录的MNAME字段中,列出了该区域的primary名称服务器。
解析日志通常不会直接存起来,
需要在 /etc/namedconf 里的 logging 设置,
除了 xfer-log 的频道外,再加上以下的内容:
由於我这边dns的解析日志非常的大,
你可自行调整 versions, size 之值,以适合你自己的环境:
logging {
channel querylog {
file "/data/logs/querylog" versions 55 size 900m;
print-time yes;
severity debug 3;
};
category queries { querylog; };
};
当named重新启动后,tail -f querylog 就会看到疯狂的解析过程。
所谓bind,就是指绑定本地接受端口。
指定ip,是为了分辨多ip主机。
bind是服务端调用的函数,绑定的是服务端的IP,假设服务端有多个网卡,即会有多个IP,这个时候我们可以选择用bind绑定其中一个IP,那么服务端只接收该IP上某端口的数据。
如果bind绑定的是INADDR_ANY,即表示所有发送到服务器的这个端口,不管是哪个网卡/哪个IP地址接收到的数据,都由这个服务端进程进行处理。
对方所在的区域信号弱。
bind手机状态未知可能代表对方没有连接网络,无法进行数据更新。对方所在的区域信号弱,也无法更新位置。对方把GPS功能关闭了,看不见位置移动信息。对方就一直待在原地没有移动,也会出现位置不更新。
Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为BerkeleyInternetNameDomain,它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台
私有DNS服务对服务器的硬件要求很低,操作系统的安装以及docker服务的安装这里就不再详细介绍,
搭建私有DNS服务器需要占用的端口 53 , 10000 ,所以首先禁用服务 systemd-resolved
DNS 服务器IP地址是 1921687127
登录webmin 的用户名是 root ,密码是环境变量 ROOT_PASSWORD 的值,登录进去之后可以修改语言如下如
创建反向区域
同网段机器配置DNS首选服务地址 1921687127 ,
不需要再配置 114114114114,233555 等dns服务器地址,在私有DNS 转发中已配置
配置后需要等待1分钟左右,即可使用私有域名来访问对应主机
"网络服务器中bind()函数中 被 绑定的那个套接字和accpet()函数所创建的那个套接字使用的是同一端口吗?"
一样的ip,一样的端口,只是套接口不一样而已。
"bind()中的那个是用来监听的,而accpet()函数所创建的那个是用来通信的,也就是说一个端口即能用来监听又能用来通信吗?"
对的,ip是主机的标识,端口是进程的标识,而套接口是网络数据流的表示,ip端口都相同的情况下,可以有多条网络流,这就是为什么大家能一起上百度的原因。
bind()函数的使用方法很简单,但是它是怎么实现的呢?
本文将从应用层出发,沿着网络协议栈,分析了bind()、 listen()的系统调用、Socket层实现,以及它的TCP层实现。
应用层
int bind(int sockfd, const struct sockaddr my_addr, socklen_t addrlen);
bind() gives the socket sockfd the local address my_addr
给socket描述符绑定IP和端口,一般服务器才需要。端口号的范围为0 ~ 65535。调用bind()时,一般不要把端口号置为小于1024的值,因为1到1023是保留端口号。
系统调用
bind()是由glibc提供的,声明位于include/sys/socketh中,实现位于sysdeps/mach/hurd/bindc中,主要是用来从用户空间进入名为sys_socketcall的系统调用,并传递参数。sys_scoketcall()实际上是所有socket函数进入内核空间的共同入口。
在sys_socketcall()中会调用sys_bind()。
经过了socket层的总入口sys_socketcall(),现在进入sys_bind()。
经过了socket层的总入口sys_socketcall(),现在进入sys_bind()。
通过文件描述符,找到对应的file结构。
通过file结构,找到对应的socket结构。
把用户空间的socket地址复制到内核空间,同时检查是否合法,成功返回0。
socket层
SOCK_STREAM套接口的socket层操作函数集实例为inet_stream_ops,其中绑定函数为inet_bind()。
socket层做的主要事情为合法性检查、绑定IP地址,而真正的端口绑定是在TCP层进行的。
应用层
int listen(int sockfd, int backlog);
Accept incoming connections and a queue limit for incoming connections
backlog的定义
Now it specifies the queue length for completely established sockets waiting to be accepted,
instead of the number of incomplete connection requests The maximum length of the queue
for incomplete sockets can be set using the tcp_max_syn_backlog sysctl When syncookies
are enabled there is no logical maximum length and this sysctl setting is ignored
全连接队列的最大长度:
backlog保存的是完成三次握手、等待accept的全连接,而不是半连接。
负载不高时,backlog不用太大。(For complete connections)
系统最大的、未处理的全连接数量为:min(backlog, somaxconn),netcoresomaxconn默认为128。
半连接队列的最大长度:
tcp_max_syn_backlog默认值为256。(For incomplete connections)
当使用SYN Cookie时,这个参数变为无效。
半连接队列的最大长度为backlog、somaxconn、tcp_max_syn_backlog的最小值。
listen()是由glibc提供的,声明位于include/sys/socketh中,实现位于sysdeps/mach/hurd/listenc中,主要是用来从用户空间进入名为sys_socketcall的系统调用,并传递参数。sys_socketcall()实际上是所有socket函数进入内核空间的共同入口。
在sys_socketcall()中会调用sys_listen()。
经过了socket层的总入口sys_socketcall(),现在进入sys_listen()。
SOCK_STREAM套接口的socket层操作函数集实例为inet_stream_ops,其中监听函数为inet_listen()。
检查套接口的状态、当前连接的状态是否合法,然后调用inet_csk_listen_start()启动监听。
启动监听时,做的工作主要包括:
listen_sock结构用于保存SYN_RECV状态的连接请求块,所以也叫半连接队列。
(1)创建
queue是连接请求控制块,nr_table_entries是半连接的最大个数,即backlog。
(2)销毁
销毁连接请求块中的listen_sock实例,释放半连接队列。
0条评论