分類
技術文章 網域名稱

DNS 除錯教學系列文章(5) – 常見 DNS 問題與 dig 除錯方法

DNS 系列文章目錄

DNS 除錯教學系列文章(1) – DNS 入門
DNS 除錯教學系列文章(2) – DNS 架構
DNS 除錯教學系列文章(3) – DNS 紀錄
DNS 除錯教學系列文章(4) – dig 指令
DNS 除錯教學系列文章(5) – 常見 DNS 問題與 dig 除錯方法

首先你一定有一個問題,或是查詢的目標,譬如問題是郵件不會通、網站打不開、或是想知道 www 目前指到那一台伺服器,針對你要查詢的問題,首先查 NS 的位址然後再查詢你要確認的狀況。

第一步驟 – 查詢 NS 的位址

在你作 dig 除錯開始之前,首先你要確認網域名稱的名稱伺服器(NameServer) 位址,因為所有回應都一定從名稱伺服器回應,如果你使用的是域名註冊商或是 CloudFlare 之類的服務,那你的名稱伺服器就是這些業者,就是你在網域名稱註冊商中填寫的名稱伺服器(NameServer) 欄位的資料。

但是你在除錯的時候,不要用登入網頁去查你現在的設定值是什麼,因為你應該模擬 DNS 運作的方式去取得名稱伺服器的位址,就跟正常的查訊一模一樣,該怎麼查詢名稱伺服器的位址呢?請查詢 NS 類型,你可以先用 +short 查看簡易輸出:

$ dig +short rsync.tw ns
ns2.gandi.net.
ns3.gandi.net.
ns1.gandi.net.

這樣就能知道目前網域名稱的名稱伺服器是哪幾台,也就是 DNS 紀錄是由這些伺服器管理。這是一般人查詢 NS 的方式,但最正確的方式應該是透過上層的名稱伺服器來查詢下層名稱伺服器的位址,舉例來說我要知道 rsync.tw 的名稱伺服器,我應該要對 .tw 的伺服器送出 rsync.tw 的 NS 查詢,要直接由 .tw 伺服器回應我才對,這部份要分兩個階段來做,第一步驟是你必須知道上層網域的名稱伺服器,然後第二步驟是直接對這些名稱伺服器送出查詢:

# 第一步驟
$ dig +short tw ns
a.dns.tw.
g.dns.tw.
c.dns.tw.
e.dns.tw.
b.dns.tw.
f.dns.tw.
d.dns.tw.
ns.twnic.net.
h.dns.tw.
anytld.apnic.net.

# 第二步驟
$ dig @h.dns.tw rsync.tw ns
[省略]
;; AUTHORITY SECTION:
rsync.tw.		3600	IN	NS	ns2.gandi.net.
rsync.tw.		3600	IN	NS	ns1.gandi.net.
rsync.tw.		3600	IN	NS	ns3.gandi.net.

為什麼要分兩次查詢呢?難道不能直接用 $ dig +short rsync.tw ns 的方式嗎?若是你直接用 dig 去查詢域名的 ns,系統會透過 DNS Cache Server 來查詢 NS 紀錄 (如下圖左邊),這樣有可能會拿到 Public DNS 的暫存資料,所以你應該用到第二種方式直接對 .tw 伺服器發送查詢 (如下圖右邊),才會拿到最正確的資料。

DNS 查詢

這邊是以 .tw 的網域名稱為範例,如果你是要查詢 .com 或是 .info 的域名,就要去查詢不同的上層名稱伺服器喔!

可能發生的問題

空的、沒有回應

如果你在查詢 NS 的時候出現錯誤,或是發現有回應,但是沒有資料,那表示可能是 (1) 名稱伺服器資料填錯了,請去網域名稱註冊商那邊檢查 (2) 網域到期沒繳,或是狀態有問題,可以用 Whois 查看一下是否有問題。

名稱伺服器是 Public DNS

有些人會把 Public DNS 以為是名稱伺服器,結果就把 8.8.8.8 或是 168.95.1.1 填入名稱伺服器,這當然是不對的。

跟你填的資料不同

NameServer (NS) 的資料就是你在域名註冊商所填入的名稱伺服器,像下面是我在註冊商填入的:

rsync.tw 的名稱伺服器 – Gandi.net

然後這邊是我實際查詢出來的,跟上方要長的一樣,順序沒有關係:

$ dig +short rsync.tw ns
ns2.gandi.net.
ns3.gandi.net.
ns1.gandi.net.

如果你查詢出來不一樣,則表示域名註冊商沒有將您的名稱伺服器更新到域名管理局 或是你剛好更換名稱伺服器中。

第二步驟 – 直接查詢名稱伺服器的資料

在你確認 NS 的位址之後,接下來直接對名稱伺服器送出查詢,查詢你要解析的網域名稱,名稱伺服器回應的資料應該是最新、最完整的,所以你要知道紀錄更新了沒、解析到底正不正確,都是透過直接查詢名稱伺服器來獲得解答。

假設我現在要查詢的是 www.rsync.tw 的資料,或是 rsync.tw 的 MX 紀錄,我直接對名稱伺服器查詢:

$ dig +short @ns1.gandi.net www.rsync.tw a
webredir.vip.gandi.net.
$ dig +short @ns2.gandi.net www.rsync.tw a
webredir.vip.gandi.net.
$ dig +short @ns3.gandi.net www.rsync.tw a
webredir.vip.gandi.net.

可能發生的問題

名稱伺服器同步不一致

為什麼上面的範例要查三次?因為這個網域名稱有三台名稱伺服器,如果你有十台,麻煩查 10 次,因為你要確保每一台的資料都是正確的,如果有其中一台不正確,或是尚未同步,則實際在網站連線的時候,連線就會跳來跳去,一下跑到舊的,一下跑到新的,所以若你發現舊的伺服器持續有連線,表示有某個名稱伺服器還是舊的資料。

名稱伺服器沒有回應

如果你在對名稱伺服器查詢的時候,沒有回應,表示名稱伺服器的 DNS 服務有問題,通常不一定是機器壞掉,有可能是單純 DNS 沒有啟動,這時候你才可以用 ping (ip) 的方式去看一下機器有沒有回應,如果有,表示單純 DNS 服務的問題,這是後又可以用 dig +tcp 的方式將查詢改為 TCP 連線,就可以測試是否是火牆的問題,因為有先防火牆設備 (不論是本機防火牆或是額外的設備) 預設是不開啟 UDP 連線。如果 dig +tcp 的方式有回應,就要朝向防火牆的問題去解決。

所以查詢指令有:

# 查詢名稱伺服器回應,你可以查詢 SOA,因為一定有這筆紀錄
$ dig @(NS IP) (domain) soa

# 如果上面沒有回應,改用 ping 看看是不是主機或網路問題
$ ping (NS IP)

# 如果 ping 有回應,但依舊查不到,改用 +tcp 查看是否為防火牆
$ dig +tcp @(NS IP) (domain) soa

檢查權威伺服器回答

名稱伺服器指的是由上往下的授權,譬如 rsync.tw 的名稱伺服器是由 .tw 上往下授權到 ns[1-3].gandi.net 的名稱伺服器。

雖然上往下授權了,但可不見得授權是正確的,因為上往下的授權其實是使用者自己填的,他可以亂填、或是填錯了,你會發現上層會依照使用者輸入的資料直接變成名稱伺服器(NS)。

但實際上,必須要由系統管理者在伺服器中建立正確的區域檔紀錄,並且告訴 DNS 伺服器要管理某個網域名稱,這時候電腦才會知道說這個網域是我管理範圍,所以要由我來回應。在伺服器設定了管理網域之後,這台伺服寄就會變成所謂的 “權威伺服器” ,而這台伺服器的回應,就叫做 “權威伺服器回答 (回應)” ,所以 DNS 的正確授權應該要確認兩個因素:(1) 由上對下正確授權 (2) 伺服器具備權威伺服器回答,缺一不可!

檢查權威伺服器回答很簡單,因為在 dig 的回應中本來就會顯示是否是權威伺服器回答。在 dig 的參數中不要使用 +short 就可以看到標頭 (header) 的部份,答案就在標頭的 “AA” 旗標。

$ dig @ns1.gandi.net rsync.tw a

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @ns1.gandi.net rsync.tw a
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45858
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1680
;; QUESTION SECTION:
;rsync.tw.			IN	A

;; ANSWER SECTION:
rsync.tw.		10800	IN	A	217.70.184.38

在上述的回應中,有一個 “flags: qr aa rd;”,aa = AA 就是權威伺服器回答的意思,也就是這個伺服器知道自己管理了此網域,所以會從區域檔中的資料回應給查詢端。如果你對 Public DNS 查詢的話,是不會有這個 AA 旗標的。如果你查詢的是名稱伺服器,但卻沒有 AA,表示管理員沒有正確設定伺服器。

如果你剛更新了 www 的紀錄,或是想知道 MX 的紀錄是否正確,或是設定了任何 TXT、A、CNAME 的紀錄,想知道權威伺服器是否正確,就可以做幾個查詢,然後順便檢查一下 AA 旗標,記得把名稱伺服器與網域名稱都換成你自己的喔:

# 查詢權威伺服器的 www 紀錄
$ dig @ns1.gandi.net www.rsync.tw a

# 查詢 CNAME 紀錄
$ dig @ns1.gandi.net www.rsync.tw cname

# 查詢 MX 紀錄
$ dig @ns1.gandi.net rsync.tw mx

# 查詢 TXT 紀錄
$ dig @ns1.gandi.net rysnc.tw txt

查詢快取伺服器 (Public DNS)

最後一步就是要查詢快取伺服器的回應資料,看看是否正確,一般所有的用戶電腦都會透過快取伺服器 (譬如8.8.8.8、168.95.1.1) 取得 DNS 的資料,所以我們要測試一下是否正確:

$ dig @8.8.8.8 www.rsync.tw a

可能發生的問題

查詢到舊資料

如果你查詢到舊的資料,其實不用太緊張,因為 DNS 有 TTL 暫存時間,在暫存時間內,都會保留資料直到 TTL (秒) 時間過去。這時候你要做的就是確認每一個權威伺服器的查詢是否都是最新的資料,然後你重複對同一個快取伺服器查詢,理論上你應該會看到 TTL 的時間越來越少,這時候就是等待 TTL (秒) 的時間過去。

但這時候你其實你可以查詢一下其他快取伺服器的回應,應該會回應最新的資料,例如你剛剛查詢的是 8.8.8.8,你可以試試看 101.101.101.101 或是 1.1.1.1。

# 對 Google 的 Public DNS 查詢
$ dig @8.8.8.8 www.rsync.tw a

# 對 APNIC 的 Public DNS 查詢
$ dig @101.101.101.101 www.rsync.tw a

# 對 Cloudflare 的 Public DNS 查詢
$ dig @1.1.1.1 www.rsync.tw a

解析失效 NXDOMAIN

如果你在上述查詢的過程中,都沒有問題,但是在 Public DNS 這些快取伺服器卻沒有回應,則有可能是錯誤是 DNSSEC 壞掉了,這時候請找你的域名註冊商取消你的 DNSKEY 金鑰。你可以用這個連結來測試一下 DNSSEC 有沒有問題。

分類
教學 最新文章

如何建立 WordPress 的子主題

當我們安裝好 WordPress 的佈景主題後,可能覺得對於字型大小不滿意,或是對於圖片的大小不滿意,想要針對目前的佈景主題去做一些小修改的時候,就要透過子主題的方式。

如果你只是把圖片、文字換掉,那個不是修改佈景主題,不需要去建立子主題,建立子主題的目的是要對原本的佈景主題客製化一些內容,或是要大幅度的修改程式碼,才會使用子主題。

難道不能直接修改佈景主題嗎?

分類
Gandi.net 最新文章

Git 小秘訣,簡化與加快 Git 操作

Git 指令小訣竅

快速切換回去剛剛的分支

用 (-) 就可以切換回剛剛的分支,跟 Shell 一樣

# Checkout master
git checkout master
# Create and checkout to a new branch
git checkout -b git-tips
# Checkout master
git checkout master
# Checkout to the previous branch (git-tips)
git checkout -

 

刪除已經合併回 master 的分支

# Make sure you have checked out master first
git checkout master

# Delete merged branches to master except master
git branch --merged master | grep -v "master" | xargs -n 1 git branch -d

如果不小心把 master 刪除了,用下列指令救回來就好(前提是你有 push 過遠端程式庫):

git checkout -b master origin/master

 

刪除遠端程式庫已不存在的分支

如果你想先確定一下有哪些分支會被刪除,但不想實際刪除,請用 –dry-run:

git remote prune origin --dry-run

實際刪除:

git remote prune origin

 

從目前分支為基礎建立一個新的分支

如果你在 dev 分支,但想要從 master 開始建立分支,基本的作法是:

git checkout master
git checkout -b new-branch

你其實可以直接從 dev 分支開出一個基於 master 的分支

git checkout -b new-branch master

同理,直接基於其他分支開出新的分支

git checkout -b new_branch base_branch

 

Git 設定小訣竅

排除某些檔案,並將設定檔套用在所有專案上

touch ~/.gitignore
git config --global core.excludesFile ~/.gitignore

或是寫入設定檔:

vi ~/.gitconfig:
[core]
 excludesFile = ~/.gitignore

 

在 Fetch/Pull 時自動清除遠端已砍掉的分支

git config --global fetch.prune ture

或是寫入設定檔:

vi ~/.gitconfig:
[fetch]  
 prune = true

 

在 rebase 互動模式時,預設啟用 Autosquash

git config --global rebase.autosquash true

或是寫入設定檔:

vi ~/.gitconfig:
[rebase]
 autosquash = true

 

設定預設的編輯器

git config --global core.editor vim

或是寫入設定檔:

vi ~/.gitconfig:
[core]
 editor = vim

 

自訂 diff 工具

git config --global diff.tool vimdiff

或是寫入設定檔:

vi ~/.gitconfig:
[diff]
 tool = vimdiff

選項有: vimdiff / magit / meld / kdiff3

 

Merge 的時候有時候會寫是 diff 資訊,也可以一同設定

git config --global merge.tool vimdiff

或是寫入設定檔:

vi ~/.gitconfig:
[merge]
tool = vimdiff

 

Git 指令別名(Alias)

有時候你需要輸入又臭又長的指令,像是:

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative

不人道!可以寫入 gitconfig 就好了,之後就可以用 git lg 或是 git lol 來執行簡化過得指令。

vi ~/.gitconfig:
[alias]
  lg=log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
  lol=log --graph --decorate --pretty=oneline --abbrev-commit

 

文章出處:https://about.gitlab.com/2016/12/08/git-tips-and-tricks/

—-

作者:HaWay, Gandi.net 技術傳教士/GitLab 愛好者, 聯絡方式:haway[at]rsync.tw

分類
GitLab 最新文章

GitLab 10.3 功能介紹

原文連結:https://about.gitlab.com/2017/12/22/gitlab-10-3-released/

分類
SSL 技術文章 教學 最新文章

在 Google Cloud Platform(GCP) 上使用 Bitnami 版的 WordPress 如何安裝憑證

如果你是用 Bitnami 版的 WordPress,然後是使用 Google Cloud Platform(GCP) 的平台,可以參考本篇的作法把你的憑證裝起來。

你需準備幾個檔案:

  • 私有金鑰(Private Key)
  • 憑證(Certificate)
  • 中繼憑證(Imtermediate Certificate)

如果你不知道上面這些是什麼東西,請先詳細閱讀 SSL 基礎 來講整個步驟與原理搞懂。

先切換程 root 身份

$ sudo su -

在 /opt/bitnami/apache2/ 建立一個 myssl 資料夾來存放相關檔案。上傳(使用 sftp 或是相關 FTP 軟體)憑證(.crt), Private key(.key) 與中繼憑證(ca-bundle.crt) 到 myssl 資料夾,名稱自訂,但不要搞混。

# mkdir /opt/bitnami/apache2/myssl

修改 Apache 設定檔,改過之後 Apache 就會從主設定中去載入 httpd-ssl.conf 這個檔,這樣做的好處是主設定都在 httpd.conf 中,而利用載入的方式去讀取 SSL 的相關設定,這樣把所有 SSL 的設定檔都放在一個地方,如果你突然要關閉 SSL,就只要把這一行載入的再重新註解就好了。

# vi /opt/bitnami/apache2/conf/httpd.conf

把註解(#) 拿掉
Include conf/extra/httpd-ssl.conf

修改 httpd-ssl.conf :

# vi /opt/bitnami/apache2/conf/extra/httpd-ssl.conf

<VirtualHost _default_:443>

路徑改成你上傳的憑證
 SSLCertificateFile "/opt/bitnami/apache2/conf/server.crt"

路徑改成你上傳的 Private key
 SSLCertificateKeyFile "/opt/bitnami/apache2/conf/server.key"

路徑改成你上傳的 中繼憑證
 SSLCACertificateFile "/opt/bitnami/apache2/conf/ssl.crt/ca-bundle.crt"

請注意看 SSLCertificateFile、SSLCertificateKeyFile 與 SSLCACertificateFile 這三個是不一樣的名稱,並且指向不同的檔案,請不要搞混了。

重新啟動 apache 伺服器,不會的話就整台伺服器重開。搞定!

分類
教學 最新文章

名稱伺服器的正確設定方式

名稱伺服器(NameServers) 的作用是將 DNS 的管理權向下授權,意思就是如果你指定了這個域名的 NameServer 紀錄,表示此域名的 DNS 紀錄管理權已經授權到其他機器。

分類
Gandi.net 教學

如何用 Gandi 的組織功能來管理域名

Gandi 在最新版的 v5 網站中提供了一個新的功能,叫做組織角色,讓你可以用將團隊群組的概念來管理 Gandi 的所有產品,給予不同團隊不同的權限,這樣你不需要跟客戶交換密碼,又或者在意外包商的權限過高的問題。

分類
Gandi.net SSL 教學

2017 年了,你的網站還沒有 SSL ?Gandi Simple Hosting S+ (免費標準憑證方案)

Gandi 的 Simple Hosting(PaaS) 主機最近推出了 S+ 的方案,能夠支援 SSL 憑證,並且只要域名在 Gandi 而且又是使用 Gandi 的 Simple Hosting 的話,就可以免費擁有憑證,你有幾個網站,就可以裝幾個憑證,憑證(標準單一位址版)通通不用錢。

分類
教學 網域名稱

網域名稱移轉

什麼是網域名稱移轉?

將你的網域名稱從 A 註冊商換到 B 註冊商去,這個步驟叫做網域名稱註冊商變更,一般通稱域名移轉,或是更簡單說移轉

所以如果你不滿意現在的域名註冊商,其實不需要等域名到期然後又跑去另外一家註冊商重新註冊,只要做移轉就可以了!
分類
SSL 教學

SSL 問答集|FAQ

[ultimate-faqs include_category=’ssl’]