DNS 域名系統
定義
域名系統是域名和IP地址相互映射的一個分布式數據庫,能夠是用戶更方便的訪問互聯網。不用去記住能夠被機器直接讀取的IP。
域名分類
域是分層管理的
# 根域: [.]
# 頂級域:
按性質: [.org\.net\.com\.edu\.gov]
按國家: [.cn\.tw\.hk]
# 普通域
比如: [.baidu]
解析流程
本地DNS緩存
-> 本地hosts文件
-> 指定的DNS服務器
如果指定的DNS服務器沒有找到對應的域名,會返回到客戶端,客戶端會向上一級DNS服務器繼續發送請求。直至查詢到或者頂級服務器也沒查詢到。
DNS分類
1. 主DNS服務器:存儲原始資料
2. 從DNS服務器:自動更新注DNS服務器的數據
3. 緩存服務器:轉發來自客戶端的請求,但是會緩存查詢回來的結果
4. 轉發器:不向根域發送請求,而是直接發給其他的服務器,並不緩存結果
資源記錄
格式
域名 生存期 類別 類型 值
1. 域名:指定這條記錄適用於哪個域
2. 生存期:指定該條記錄的穩定程度單位秒
3. 類別:互聯網信息都是 IN
4. 類型:每個資源記錄類型
5. 值:對應的值
資源記錄類型
1. SOA Star of authority 起始授權 必須是第一行 只能有一個
2. A IPV4 address
3. AAAA IPV6 address
4. MX Mail exchange
5. NS Name Server
6. CNAME Canonical name 可以將域名轉換,別名
7. PTR 方向解析
...還有很多
用bind
搭建一台DNS
服務器
我們在RHEL1
上搭建DNS服務器
安裝bind
yum install bind bind-utils
創建自己的zone
文件
# 可以使用如下命令查看 包 bind 影響的文件夾以及文件夾
[root@rhel1 Desktop]# rpm -ql bind
# 在 /var/named 文件下創建 node.com.zone
[root@rhel1 named]# cat node.com.zone
$TTL 1D # $TTL指令表示一個資源記錄在其他DNS服務器
# $ORIGIN指令表示該zone文件用來描述的域(domain)名稱
@ IN SOA @ admin.qq.com. (
20191128;serial版本號
1D;refresh 刷新時間,每隔多久去查看版本號
1H;retry 重新刷新時間
1W;expire 過期時間
3H;否定答案緩存時間) # 配置SOA。它定義了一個域的全局特性,必須是出現在zone文件中的第一個資源記錄,而且一個zone文件中必須只有一個SOA資源記錄。
@ IN NS server # 配置NS
server IN A 192.168.143.10 #配置server地址
control1 A 192.168.143.10 #配置控制接口的域名
control2 A 192.168.143.11 #配置控制接口的域名
control3 A 192.168.143.12 #配置控制接口的域名
net121 A 192.168.140.10 #配置12服務器連接接口的域名
net122 A 192.168.140.11 #配置12服務器連接接口的域名
net231 A 192.168.245.10 #配置23服務器連接接口的域名
net232 A 192.168.245.11 #配置23服務器連接接口的域名
在主配置文件中,增加自己的zone
# 編輯配置文件 /etc/named.rfc1912.zones 添加如下內容
[root@rhel1 named]# tail -4 /etc/named.rfc1912.zones
zone "node.com." IN {
type master;
file "node.com.zone"
};
### 這個位置正常些文件名字就可以,如果named啟動不了改成絕對路徑/etc/named/node.com.zone
# 也可以在 /etc/named.conf 文件中增加
檢測是否配置成功
# 檢測是否配置成功
[root@rhel1 named]# named-checkzone node.com. node.com.zone
zone node.com/IN: loaded serial 20191128
OK
# 啟動named
[root@rhel1 named]# systemctl start named
[root@rhel1 named]# systemctl enable named
測試配置的結果
# dig命令檢測 dns 解析,
### 沒有dig命令 請安裝 `bind-utils`
[root@rhel1 named]# dig -t A control1.node.com
; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> -t A control1.node.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61583
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;control1.node.com. IN A
;; ANSWER SECTION:
control1.node.com. 86400 IN A 192.168.143.10
;; AUTHORITY SECTION:
node.com. 86400 IN NS server.node.com.
;; ADDITIONAL SECTION:
server.node.com. 86400 IN A 192.168.143.10
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 28 13:31:41 CST 2019
;; MSG SIZE rcvd: 99
# 直接ping也可以
[root@rhel1 named]# ping control1.node.com
PING control1.node.com (192.168.143.10) 56(84) bytes of data.
64 bytes from 192.168.143.10: icmp_seq=1 ttl=64 time=0.027 ms
# nslookup 測試
[root@rhel1 named]# nslookup
> control1.node.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: control1.node.com
Address: 192.168.143.10
防火牆放行
firewall-cmd --add-service=dns --permanent
firewall-cmd --add-service=dns
在RHEL2
上配置並測試
# 增加DNS配置
[root@rhel2 html]# tail -1 /etc/resolv.conf
nameserver 192.168.143.10
# 重啟網絡
[root@rhel2 html]# systemctl restart network
# 確認配置還在
[root@rhel2 html]# tail -1 /etc/resolv.conf
nameserver 192.168.143.10
### 有時候重啟后配置就不在了。是因為/etc/sysconfig/network-script下的鏈接配置里已經配置了DNS,可以在鏈接配置了增加
[root@rhel2 html]# ping control1.node.com
PING control1.node.com (192.168.143.10) 56(84) bytes of data.
用 unbound搭建一個緩存服務器
安裝
[root@rhel2 html]# yum install -y unbound
[root@rhel2 html]# systemctl start unbound
[root@rhel2 html]# systemctl enable unbound
更改配置
[root@rhel2 html]# vim /etc/unbound/unbound.conf
# 下面的配置在文件中都能找到,只是需要打開注釋
server:
# whitespace is not necessary, but looks cleaner.
interface: 0.0.0.0
acces-control: 0.0.0.0/0 allow
domain-insecure: "node.com"
# verbosity number, 0 is least verbose. 1 is default.
verbosity: 1
forward-zone:
name: "."
forward-host: 192.168.143.10
# 檢測配置
[root@rhel2 html]# unbound-checkconf
unbound-checkconf: warning: . forward-host: "192.168.143.10" is an IP4 address, and when looked up as a host name during use may not resolve.
unbound-checkconf: no errors in /etc/unbound/unbound.conf
# 重啟
[root@rhel2 html]# systemctl restart unbound
防火牆放行
[root@rhel2 html]# firewall-cmd --add-service=dns --permanent
[root@rhel2 html]# firewall-cmd --add-service=dns
在RHEL3
上將DNS服務器配置成緩存服務器
[root@rhel3 ~]# tail -1 /etc/resolv.conf
nameserver 192.168.143.11
[root@rhel3 ~]# systemctl restart network
[root@rhel3 ~]# ping control1.node.com
PING control1.node.com (192.168.143.10) 56(84) bytes of data.
注: Unbound
與 bind
都能夠搭建主DNS服務器
郵件服務器
電子郵件架構
Linux服務器也會發送電子郵件,一般是出於自動用途,或者向管理員報告錯誤。
# 查看當前郵箱列表,可以看到有一封信
[root@rhel1 Desktop]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/root": 3 messages 1 new 2 unread
1 user@localhost.local Fri Aug 16 19:06 830/62447 "[abrt] full crash report"
# 我們自己給自己發一封
[root@rhel1 Desktop]# mail root
Subject: test
This is test mail!!!
EOT # 按CTRL+D發送
# 查看
[root@rhel1 mail]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/root": 2 messages 1 new
1 user@localhost.local Fri Aug 16 19:06 848/63026 "[abrt] full crash report"
>N 2 root Thu Nov 28 18:10 18/570 "test"
& 2
Message 2:
From root@rhel1.node.com Thu Nov 28 18:10:16 2019
Return-Path: <root@rhel1.node.com>
X-Original-To: root
Delivered-To: root@rhel1.node.com
Date: Thu, 28 Nov 2019 18:10:05 +0800
To: root@rhel1.node.com
Subject: test
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@rhel1.node.com (root)
Status: R
This is test mail!!!
郵件協議
簡單郵件傳輸協議(SMTP)
用來發送或中轉發出的電子郵件,占用25/tcp
端口
第三版郵局協議(POP3)
用於將服務器上把郵件存儲到本地主機,占用110/tcp
端口
第四版互聯網信息訪問協議(IMAP4)·
用於在本地追加上訪問郵件,占用143/tcp
端口
電子郵件系統
單獨使用Postfix
服務程序不能完成收發郵件的操作。我們需要下面的軟件:
Postfix
提供的郵件發送服務SMTP
Dovercot
提供的郵件收取服務,即POP3
OutlookExpress
客戶端收發郵件工具
搭建郵件系統
創建空的Postfix
服務器
在RHEL1
上創建空Postfix
,在Redhat
系統中已經默認安裝了這個服務程序。
- 查看配置文件
# 我們只需要配置下面的配置項即可
myhostname 郵局系統的主機名
mydomain 郵局系統的域名
myorigin 從本機寄出郵件的域名名稱
inet_interfaces 監聽的網卡接口
mydestination 可接受郵件的主機名或域名
mynetworkds 設置可轉發哪些主機的郵件
relay_domains 設置可轉發那些域名得郵件
- 配置
etc/postfix/main.cf
為空的postfix
# 不建議直接編輯,使用`postconf`配置
### 配置本機郵件寄出的域名,會將從本機發出去的發件人域重寫成配置項
[root@rhel1 ~]# postconf -e "myorigin=node.com"
### 設置成僅偵聽用於發送電子郵件的回環接口
[root@rhel1 ~]# postconf -e "inet_interfaces=loopback-only"
### 設置指向的郵件服務器
### 此處的control2是上面 dns配置的服務器2的域名
[root@rhel1 ~]# postconf -e "relayhost=[control2.node.com]"
### 關閉本地電子郵件發送
[root@rhel1 ~]# postconf -e "local_transport=error:local delivery disabled"
### 本地發送不會接受收件人為本地電子郵件賬戶的郵件
[root@rhel1 ~]# postconf -e "mydestination="
### 源自127.0.0.0/8和[::1]/128網絡的郵件能夠由本地空客戶端發送到主機
[root@rhel1 ~]# postconf -e "mynetworks=127.0.0.0/8 [::1]/128"
[root@rhel1 ~]# systemctl restart postfix
配置接收端
在RHEL2
上配置
[root@rhel2 ~]# postconf -e "inet_interfaces = all"
[root@rhel2 ~]# postconf -e "mydestination = node.com"
[root@rhel2 ~]# systemctl restart postfix.service
[root@rhel2 ~]# firewall-cmd --add-service=smtp --permanent
success
[root@rhel2 ~]# firewall-cmd --add-service=smtp
在RHEL1
上發送RHEL2
查看
[root@rhel1 ~]# mail root
Subject: From control1.node.com
I am control1
EOT
[root@rhel2 ~]# mail
>N 5 root Thu Nov 28 06:26 21/740 "From control1.node.co"
& 5
Message 5:
From root@node.com Thu Nov 28 06:26:41 2019
Return-Path: <root@node.com>
X-Original-To: root@node.com
Delivered-To: root@node.com
Date: Thu, 28 Nov 2019 22:26:41 +0800
To: root@node.com
Subject: From control1.node.com
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@node.com (root)
Status: R
I am control1
配置客戶端下載郵件
更改RHEL2
上的 Postfix
配置
[root@rhel2 ~]# postconf -e "inet_interfaces=all"
[root@rhel2 ~]# postconf -e "myhostname=control2.node.com"
[root@rhel2 ~]# postconf -e "mydomain=node.com"
[root@rhel2 ~]# postconf -e "myorigin=node.com"
[root@rhel2 ~]# postconf -e "mydestination=node.com"
[root@rhel2 ~]# systemctl restart postfix
創建一個賬號
[root@rhel2 ~]# useradd test_mail_user
[root@rhel2 ~]# echo "test_mail_user" |passwd --stdin test_mail_user
Changing password for user test_mail_user.
passwd: all authentication tokens updated successfully.
配置POP3
服務器
# 安裝 dovecot
[root@rhel2 ~]# yum install -y dovecot
# 修改配置文件
[root@rhel2 ~]# grep "^[^#]" /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
disable_plaintext_auth = no
login_trusted_networks = 0.0.0.0/0
# 配置郵件格式與存儲位置
[root@rhel2 ~]# grep "^mail_location" /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
# 創建郵件的存儲目錄
[root@rhel2 ~]# su - test_mail_user
[test_mail_user@rhel2 ~]$ mkdir -p mail/.imap/INBOX
[test_mail_user@rhel2 ~]$ exit
logout
# 重啟dovecot服務
[root@rhel2 ~]# systemctl restart dovecot
[root@rhel2 ~]# systemctl enable dovecot
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'
# 防火牆放行
[root@rhel2 ~]# firewall-cmd --add-service=smtp --permanent
success
[root@rhel2 ~]# firewall-cmd --add-port=110/tcp --permanent
success
[root@rhel2 ~]# firewall-cmd --reload
success
在物理機上打開Foxmail
進行配置
1. 輸入 用戶名密碼:test_mail_user@node.com test_mail_user
2. 輸入服務器IP兩個都是`RHEL2`: 192.168.143.11
- 在物理機發送一封郵件給
root@node.com
cctest_mail_user@node.com
[root@rhel2 ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 8 messages 4 new 7 unread
1 kane@localhost.local Mon Oct 28 19:18 17/723 "*** SECURITY informat"
U 2 kane@localhost.local Mon Oct 28 19:19 17/722 "*** SECURITY informat"
U 3 root Thu Nov 28 06:24 22/742 "from rhel1 teset"
U 4 root Thu Nov 28 06:25 22/721 "11"
>N 5 root Thu Nov 28 06:26 21/740 "From control1.node.co"
N 6 root Thu Nov 28 06:34 21/711 "ttt"
N 7 root Thu Nov 28 06:34 22/711 "12"
N 8 test_mail_user@node. Thu Nov 28 19:46 49/1965 "Test Mail From Window"
& 8
Message 8:
From test_mail_user@node.com Thu Nov 28 19:46:47 2019
Return-Path: <test_mail_user@node.com>
X-Original-To: root@node.com
Delivered-To: root@node.com
Date: Fri, 29 Nov 2019 11:46:47 +0800
From: "test_mail_user@node.com" <test_mail_user@node.com>
To: root <root@node.com>
Cc: test_mail_user <test_mail_user@node.com>
Subject: Test Mail From Windows
X-Priority: 3
X-Has-Attach: no
X-Mailer: Foxmail 7.2.14.409[cn]
Content-Type: multipart/alternative;
boundary="----=_001_NextPart204586814442_=----"
Status: R
Content-Type: text/plain;
charset="us-ascii"
Hi root
This is a test mail from Foxmail.
test_mail_user@node.com
- 在物理機上同樣也可以收到這封郵件。