DNS服務 DNS:Domain Name Service //協議 實現:BIND(Berkeley Internet Name Domain) 監聽埠: UDP:53 TCP:53 名稱解析:將一種格式的信息轉化為另外一種格式,以某關鍵字為標準查找某一資料庫的過程passwd <--> nss ...
DNS服務
DNS:Domain Name Service //協議
實現:BIND(Berkeley Internet Name Domain)
監聽埠:
UDP:53
TCP:53
名稱解析:將一種格式的信息轉化為另外一種格式,以某關鍵字為標準查找某一資料庫的過程
passwd <--> nsswitch轉換
login:nsswitch為login提供服務
nsswitch配置文件在/etc/nsswitch
hosts:存放的為主機與ip、別名
由於主機是在太多,所以將資料庫和伺服器進行分片管理。 分散式資料庫:將資料庫切割,放在不同的伺服器上。實際上還需要一個類似於"引路人"一般的放置著引導向各個分散式資料庫的資料庫的伺服器。當外部需要進行DNS功能變數名稱轉換時,便告訴他需要到哪個資料庫上進行名稱解析,再找到那個資料庫。實際上每個資料庫都要通過這個伺服器進行登記備案。否則將不承認,也無法找到你自己所建立的。實際上,由於數量過大,一些分散式資料庫需要再進行分佈。
其中的結構其實可以類比成Linux上的根文件系統,每個人都要通過根為入口來進行訪問文件和目錄,底下的目錄一層套著一層,最終才能找到自己需要的文件。
根域(.)-->一級域(ICCNA)-->二級域(組織域) 實際上我們平時輸入的功能變數名稱都是自下而上進行輸入的如(www.baidu.com)www是最小的域,由此自下而上。
namespace:名稱空間
一級域:
組織域:.com,.org,.mil,.gov,.edu,
國家域:.cn,.hk,.tw,.jp,.ir(伊朗),.iq(伊拉克),.us,.uk
反向域:.in-addr.arpa
另外任何想要訪問其他主機信息的,都需要以跟作為入口去尋找,除非是在同一個伺服器管轄下的功能變數名稱,只需要找自己的伺服器就行。但是確又不會進行逐層的遞歸解析,否則根的工作量太大。每一次訪問的時候,都只會告訴其一個下一次要尋找的地址讓他自行去尋找。如找到根,根返回消息說讓他去找.com,於是.com再說你去找baidu 直到找到負責管轄的 再給以正確的IP地址信息。
遞歸:逐層解析
迭代:DNS才會迭代
根拒絕回答遞歸問題 所謂的遞歸和迭代在這邊通俗一點講,就是遞歸只需發出一次請求就能夠收到消息。而迭代則是發出好幾次請求。
客戶端指向的DNS伺服器,一定是允許給本地主機做遞歸的
資料庫每一個條叫一個資源記錄(Resource Record),資源記錄有類型 ,用於表示資源的功能
SOA:Start Of Authority,起始授權
NS:Name Server,功能變數名稱伺服器
MX:mail eXchanger:郵件交換器
A:Address,(FQDN-->IP)
PTR: PoiTeR,(IP-->FQDN)
AAAA:Address,FQDN-->IPv6
CNAME:Canonical Name,正式名稱(別名記錄)
DNS:FQDN --> IP
正反向解析技術不同,因此不應該存放於同一個資料庫文件中進行
域:Domain,邏輯概念
區域:zone,物理概念
DNS伺服器的類型
主DNS伺服器
輔助DNS伺服器 輔助伺服器不能夠自行的血區域數據文件,只能夠從主伺服器上讀取。該過程稱為區域傳送
緩存名稱伺服器
轉發器
DNS的資料庫文件(區域數據文件,區域自身有名字):文本文件,只能包含資源記錄或巨集定義,每行一個
資源記錄的格式:
name [ttl(緩存時間)] IN 資源記錄類型(RRtype) Value
例子:
www 600(單位s) IN A 1.2.3.4
www.magedu.com. 600 IN A 1.2.3.4
SOA:
name:只能是區功能變數名稱稱,通常可以簡寫為@,例如:magedu.com.
value:有n個數值,最主要的是主DNS伺服器的FQDN,點不可省略
註意:SOA必須是區域資料庫文件第一條記錄
例子:
@ 600 IN SOA na.magedu.com. 管理員郵箱(dnsadmin.magedu.com.)(
序列號(serial number) ;註釋內容,十進位數據,不能超過10位,通常使用日期,例如2014031001 用以讓輔助伺服器知道數據發生了改變的,主伺服器上每次數據改變,序列號都會發生改變
刷新時間(refresh time) ;即每隔多久到主伺服器檢查一次
重試時間(retry time) ;應該小於refresh time
過期時間(expire time)
netgative answer ttl ;否定答案的ttl
)
NS:可以有多條
name:區功能變數名稱稱,通常可以簡寫為@
value:DNS伺服器的FQDN(可以使用相對名稱)
例子:
@ 600 IN NS na
A:只能定義在正向區域數據文件中
name:FQDN(可以使用相對名稱)
value:IP
例子:
www 600(單位s) IN A 1.2.3.4
www 600(單位s) IN A 1.2.3.5
可做輪詢
www 600(單位s) IN A 1.2.3.4
ftp 600(單位s) IN A 1.2.3.4
但凡以FQDN做為其值的記錄,應該給這個值做一條A記錄
AAAA:
MX:可以有多個
name:區功能變數名稱稱,用於標識smtp伺服器
value:包含優先順序和FQDN
優先順序:0-99,數字越小,級別越高,
例子:
@ 600 IN MX 10 mail
@ 600 IN MX 20 mail2 先找優先順序高的,實在太過繁忙,則找第二個。並沒有在輪換工作
PTR:IP --> FQDN,只能定義在反向區域數據文件中,反向區功能變數名稱稱為逆向網路地址加.in.addr.arpa.尾碼組成
name:IP,逆向的主機地址,例如172.16.100.7的name為7.100,完全格式為7.100.16.172.in-addr-arpa.
value:FQDN
例子:
4.3.2. 600 IN PTR www.magedu.com.
區域傳送:
輔助DNS伺服器從主DNS伺服器或其他的輔助DNS伺服器請求數據傳輸過程
完全區域傳送:傳送區域的所有數據,AXFR
增量區域傳送:傳送區域中改變的數據部分,IXFR
輔助伺服器按時間段去跟主伺服器進行請求數據的跟新,如果多次主伺服器未能響應請求,則認為主伺服器癱瘓,不再與主伺服器進行通信(一般相關規定定義在SOA中了)。另外主伺服器如果有數據跟新,也會立刻通知輔助伺服器數據的跟新,以實現數據的同步
BIND:組織維護者isc(www.isc.org) DHCP
4:功能簡單,安全
9:
協議DNS,實現BIND,進程named
chroot 為安全提供的機制 chroot假根,讓其以這個作為根,保證安全性
主配置文件:定義區域 /etc/named.conf
至少有三個區域:
根、
locahost、
127.0.0.1
區域數據文件:/var/named
named
用戶:named
組:named
先由主配置文件聲明各種區域,然後再到/var/named 文件目錄下讀取相關的區域數據文件
主配置文件:
options{
//全局選項
}
zone "zone name" {
//定於區域
}
logging{
//日誌文件
}
include:載入別的文件
自定義
optins{
directory "/var/named";
};
zone "." IN{
type{hint(根)|master(主)|slave(從)|forward(轉發)}
file "named.ca"
}
例子如果你申請到了功能變數名稱test.com
那麼你可以配置
zone "test.com." IN{
type{master(主)}
file "test.com.zone"
}
再在/var/named目錄下創建test.com.zone文件 文件內容
$TTL 600
@ IN SOA dns.test.com. admin test.com.(
.
.
)
@ IN NS dns (這裡用了SOA上定義的相對名稱)
@ IN MX 10 mail
dns IN A 192.168.48.128
mail IN A 192.168.48.128
www IN A 192.168.48.128
pop IN CNAME mail
ftp IN CNAME www
之後改個屬組屬主和許可權
name-checkconf 檢查主配置文件
named -u named
name-checkzone "區域文件" 配置文件
定義監聽的地址
recursion 是否允許遞歸查詢
dig 命令
dig [-t type] [-x addr] name @DNS伺服器
+[no]trace [不]適用迭代
+[no]tcp 是否使用tcp
+[no]recurse:是否使用遞歸
host
host[-t type] {name} [server]
nslookup
nslookup>
server DNS_SERVER_IP
set q=TYPE
{name}
反向解析區域資料庫文件:區功能變數名稱稱以逆向的網路地址,並以.in-addr.arpa為尾碼
第一條必須SOA
應該具有NS記錄,但不能出現MX和A記錄
較常見的微PTR記錄
名稱為逆向的主機名
$TTL 600
@ IN SOA dns.test.com. admin test.com.(
.
.
)
@ IN NS dns (這裡用了SOA上定義的相對名稱)
@ IN MX 10 mail
IN NS dns.test.com
7 IN PTR dns.test.com
1 IN PTR www.test.com
區域傳送:
用dig模擬完全區域傳送
dig -t axfr 區功能變數名稱稱 @server
主從同步:
/etc/resolv.conf
主從:
主:bind版本可以低於從的
主從可以不再同一網段
向區域中添加從伺服器的關鍵兩步
在上級獲得授權
在區域數據文件中為從伺服器添加一條NS記錄和對應的A或PTR記錄,另外SOA里的序列號也要加個1
配置從伺服器的步驟
zone"test.com" IN {
type slave;
masters {192.168.48.128; };
file "slaves/test.com.zone" ; 註意這裡輔助伺服器的區域數據文件需要放在/var/named/slaves下
};
區域傳送安全控制
allow-transfer{127.0.0.1;127.16.100.1}
allow-transfer{none;}
rndc:Remote Name Domain Controller
遠程管理BIND的工具
rndc:密鑰
rndc:持有一半密鑰,保存於rndc的配置文件中
BIND:持有一般密鑰,保存在主配置文件中
rndc的配置文件/etc/rndc.conf 現在好像已經沒有了
生成密鑰 rndc-confgen 生產的密鑰文件中的一半用於BIND的文本複製到BIND的主配置文件中將註釋去掉 便可以使用rndc
rndc
reload
reload zone
reconfig:重讀配置文件並載入新增的區域
querylog:關閉或開啟查詢日誌
stop 關閉服務
flush 清空伺服器的緩存
flushname name:只清空指定名稱相關的緩存
trace:打開debug,調試模式,debug有級別的概念,每執行一次提升一個等級
trace LEVEL:指定debug的級別
如果rndc無法正常工作,可嘗試使用rndc-confgen生成/etc/rndc。conf配置文件,並將配置文件中的後半部分複製到BIND的主配置文件中按指示啟用即可
BIND子域授權的實現:
在父域的配置文件中添加如下項:
授權的子區功能變數名稱稱
子區域的名稱伺服器
子區域的名稱伺服器的IP地址
例子:
tech.test.com IN NS dns.tech.test.com
dns.tech.test.com IN A 192.168.48.160
tech.test.com IN NS ns2.tech.test.com
ns2.tech.test.com IN A 192.168.48.161 另外子域伺服器需要副伺服器的話,也需要再主伺服器上進行標明
接著子域伺服器,需要同主伺服器那樣配置屬於自己的DNS伺服器
子域伺服器與主副伺服器最大的配置差別就是,子域伺服器的功能變數名稱和父伺服器的功能變數名稱是不同的,而主副伺服器的功能變數名稱是相同的
配置區域轉發:轉發域
解析某本機不負責的區域內的名稱時不轉發給根,而是轉給指定的主機:
zone "ZONE NAME" IN{
type forward;
forwarders { DNS_SERVER; };
forward only(僅轉發)|first(先轉發在找根)
}
配置轉發的方式
轉發非本機負責解析的所有區域
options{
forward only|frist
forwarders{ ip; }
}
轉發某特定區域
zone"特定區域" IN{
type forward;
forwarders{ ip; }
forward only|frist
}
轉發必須對方伺服器支持對本伺服器的遞歸
安全控制選項:
allow-transfer{};通常都需要啟用,從伺服器
allow-query{};此項僅用於伺服器是緩存名稱伺服器時,只開放查詢功能給本地客戶端
allow-recursion{可以使用網段};允許遞歸的白名單
allow-update{ none; }:允許動態更新數據文件的主機白名單
ACL:BIND支持使用訪問控制列表
acl ACL_NAME{
172.16.0.0/16
192.168.0.0/24
127.0.0.0/8
}
訪問控制列表只有定義後才能使用,通常acl要定義在named.conf的最上方
BIND有四個內置的acl
any:任何主機
none:無一主機
local:本機
localnet:本機所在的網路
DNS編譯安裝,view視圖,LINUX完全定製內核
3月11
view 視圖,邏輯的DNS伺服器,即能夠讓不同網路(如電信和網通)訪問同一個功能變數名稱時,使其指向不同的主機IP實現訪問速度的加快。能夠實現讓一個view實現多次
acl telecom{
1.2.0.0/16
4.5.8.0
}
acl unicom{
6.4.0.0/16
4.5.3.0
}
view view_name {
match-clients{ telecom; }
zone"magelinux.com" IN{
type master;
file "magelinux.com.telcom";
}
}
view view_name {
match-clients{ unicom; }
zone"magelinux.com" IN{
type master;
file "magelinux.com.unicom";
}
}
view view_name {
match-clients{ any; }
zone"magelinux.com" IN{
type master;
file "magelinux.com.unicom";
}
}
只要寫入view,所有的都應該寫在view中 包括將/etc/named.conf下的zone "."根也放在view中
自上而下匹配
/dev/random:自動生成
熵池
/dev/udandom:軟體生成
bind dlz
rndc reeconfig
源碼安裝named
thrads 線程
epoll 時間庫
--diabled-chroot
前提:配置好開發環境,安裝包組
1.下載源代碼。編譯安裝
tar xf bind-9.9.5.tar.gz
cd bind-9.9.5
./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/--enable-threads --enable-epoll --disabled--chroot
make && make install
2配置主配置文件
3.創建區域數據文件
3.1 name.ca
dig -t NS @ >/var/named/named.ca
3.2 name.localhost
3.3 named.loopback
4創建用戶,並測試啟動
groupadd -g 53 -r named
useradd -g named-r named
chown root:named /etc/named/* /var/named/*
chmod 640 /etc/named/named.conf /var/named/*
vim /etc/profile.d/nmaed.sh
export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH'
named -u named -c /etc/named/named.conf
5、rndc
rndc -confgen -r /dev/
6、準備啟動腳本DNS 編譯安裝 02 23分到53分
7、性能測試
banckmark
queryperf
dnstop
<DNS and BIND>
bash編程之變數
1、bash的內置變數:
PATH PS1 HOSTNAME UID HISTFILE HISTEILESIZE HISTCONTROL
$BASH:bash二進位程式文件的路徑
$BASH_SUBSHELL:子shell的層次
$BASH_VERSION
$EDITOR:預設編輯器
$EUID:有效的用戶ID
$UID:當前用戶的ID號
$FUNCNAME:當前函數的名稱
$GROUPS:當前用戶顯示的組
$HOME:當前用戶的家目錄
$HOSTTYPE:主機架構類型,用來識別系統硬體
$MACHTYPE:平臺類型,系統平臺依賴的編譯平臺
$OSTYPE:OS系統類型
$IFS:輸入數據時的欄位分隔符,預設是空白符(空格、製表符、換行符)
$OLDPWD:上次使用的目錄
$PWD:當前目錄
$PPID:父進程
$PS1:主提示符
$PS2:第二提示符,主要用於補充完全命令輸入時的提示符
$PS3:第三提示符,用於select命令中
$PS4:第四提示符,當使用-X選項調用腳本時,顯示的提示符,預設為+號
$SECONDS:當前腳本已經運行的時長
$SHLVL:shell的級別。bash別嵌入的深度
2、特殊變數:
$0:腳本名稱自身
$1,$2。。。。:位置參數
$#:命令行參數個數
$*:所有的參數,被當作一個字元串
$@:所有的參數,每個參數都是一個獨立的字元串
$-:傳遞給腳本的標記
$!:運行於後臺的最後一個作業的PID
$_:上一條命令的最後一個參數的值
$?:上一條命令狀態的返回值
$$:腳本自身的PID
操作變數:
${#var} :返回變數中字元串的長度
${var}:變數引用
${var:-default}:如果var沒有聲明或者為空,則返回default字串,否則返回var自身的值
${var:+default}:如果var沒有聲明或者為空,則返回空字串,否則返回default的值
${var:=default}:如果var沒有聲明或者為空,則返回default字串,並且將default賦值給var,否則返回var自身的值
${var:?default}:如果var沒有聲明或者為空,則以default為錯誤信息返回,否則
zb 返回var自身的值
字串消除
${var#*word}:查找var中自左而右第一個被word匹配到的串,並將此串及向左的所有內容都刪除
${var#*word}:查找var中自左而右最後一次被word匹配到的串,並將此串及向左的所有內容都刪除
${var%word*}:查找var中自右而左第一個被word匹配到的串,並將此串及向右的所有內容都刪除
${var%%word*}:查找var中自右而左最後一次被word匹配到的串,並將此串及向右的所有內容都刪除
取字串:
${var:pos}:偏移pos個字元,取餘下的字串
name=jerry,${name:2}結果為rry
${var:pos:num}偏移pos個字元,取num個字元長度的字串
name='hello world' ${name:2:5}結果為llo w
字串替換
${var/Pattern/Replaceplacement} :以Pattern為模式匹配var中的字串,將第一次匹配到的替換為Replaceplacement
${var// Pattern/Replaceplacement} :以Pattern為模式匹配var中的字串,將全部匹配到的替換為Replaceplacement6
聲明變數:
declare
-i:整形
-a:數值
-x:環境變數
-r:只讀變數,不能撤銷,不能修改,相當於readonly
-f:聲明函數
OpenSSH:
ssh OpenSSH
安裝配置dropbear
1.編譯安裝
tar
cd
./configure
make PROGRMS="dropbear dbclient dropberkey scp"
make PROGRMS="dropbear dbclient dropberkey scp" install
2.腳本
3配置文件位置/etc/sysconfig/dropbear
keysize=2048
port=22022
4後配置
chmod +x /etc/rc.d/init.d/dropbear
chkconfig -add dropbear
定製Linux內核
tar -xf -C /usr/src
cd /usr/src/linux
cp /boot/config-VERSION /usr/src/linux/.config 自己選的可能會導致驅動的缺少,所以複製一份模板,再執行make menuconfig來增刪改查
make menuconfig
make
make modules_install
make install
make clean
make mrproper
make distclean
單內核:核心+ko模塊
/lib/modules/VERSION
make allnoconfig 自定義一個最小功能的內核,能夠讓系統正常運行。此時就需要完全配置
第一步 給一個將要被新主機識別的裝有內核文件的磁碟不需要太大。
fdisk /dev/sdb 創建新分區,並添加2個分區 sdb1 50M sdb2 512M
mke2fs -t ext4 /dev/sdb1 /dev/sdb2 分區格式化
mkdir /mnt/{boot,sysroot}
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot 創建兩個虛擬的根目錄,將磁碟掛在到上面
grub-install -root-directory=/mnt /dev/sdb 安裝grub
第二步 下載一個內核版本 假設叫linux3.1
tar xf linux3.1.tar.xz -C /usr/src 解壓內核文件
cd /usr/src
ln -sv linux.3 linux 軟連接一下(猜測應該是便於被系統識別)
make allnoconfig 將.config文件中的絕大部分可以省略的內核功能給關閉
make menuconfig 定製內核 這邊省略 較複雜,可以看視頻如何定製的,10-17分
make bzI(大寫的i)mage 這個只編譯壓縮格式的內核核心,並不編譯內核模塊
cp arch/x86/boot/bzImage /mnt/boot/
vim /mnt/boot/grub/grub.conf 此處省略
default=0
timeout=3
title Customzed Linux
root (hd0,0)
kernel /bzImage ro root=/dev/sda2 init=/bin/bash
為什麼要將bash 軟連接成 sh ,難道識別的時候是識別sh嗎?
PC Server CPU + men + i/o
make bzImage 只編譯核心不編譯模塊