顯示具有 DNS 標籤的文章。 顯示所有文章
顯示具有 DNS 標籤的文章。 顯示所有文章

2016年9月16日 星期五

設定Private DNS


有些網址不想讓外面人訪問,所以設定了Private DNS,讓使用VPN連線進來的設備可以直接打開網址訪問私有站。這篇的情況是iPhone 使用AnyConnect 連線openconnect,server系統為 CentOS 7

安裝bind9
# yum install bind bind-utils
編輯 /etc/named.conf 設定檔
# /etc/named.conf
新增 ACL "trusted"區段
acl "trusted" {
        10.12.0.1;    # ns1 - DNS server
        ...
        10.12.0.190;  # iPhone LAN IP
        ...
        10.12.0.254;
};
因為VPN連進來,會自動分配虛擬IP,所以只好窮舉
編輯 options 區段
options {
    listen-on port 53 { 127.0.0.1; 10.12.0.1; };
    # listen-on-v6 port 53 { ::1; };
    ...
    allow-query     { trusted; };  # allows queries from "trusted" clients
    ...
}
10.12.0.1為我連上VPN後的主要DNS IP
在最底下加入
include "/etc/named/named.conf.local";

設定 local file
# vim /etc/named/named.conf.local
zone "test2.yourdomain.com" {
    type master;
    file "/etc/named/zones/db.test2.yourdomain.com";
};
zone "test3.yourdomain.com" {
    type master;
    file "/etc/named/zones/db.test3.yourdomain.com";
};
zone "12.10.in-addr.arpa" {
    type master;
    file "/etc/named/zones/db.10.12";
};

因為我的 test.yourdomain.com DNS解析是設在CloudFlare 公開的,如果這邊zone只設 yourdomain.com ,然後在正解和反解檔案分別設 test2.yourdomain.com 、test3.yourdomain.com,這樣子連vpn後使用私有VPN 雖然查得到 test2.yourdomain.comtest3.yourdomain.com 但設在代管上的test.yourdomain.com會查詢不到

產生Forward Zone File
# chmod 755 /etc/named
# mkdir /etc/named/zones
編輯 test2.yourdomain.com 正解設定
# vim /etc/named/zones/db.test2.yourdomain.com
$TTL    604800
@       IN      SOA     ns1.test2.yourdomain.com. admin.test2.yourdomain.com. (
                  3       ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
; name servers - NS records
     IN      NS      ns1.test2.yourdomain.com.

; name servers - A records
ns1.test2.yourdomain.com.          IN      A       10.12.0.1

; 10.12.0.0/16 - A records
test2.yourdomain.com.        IN      A      10.12.0.1 # 因為我web server和DNS在同一台

編輯 test3.yourdomain.com 正解設定
# vim /etc/named/zones/db.test3.yourdomain.com
$TTL    604800
@       IN      SOA     ns1.test3.yourdomain.com. admin.test3.yourdomain.com. (
                  3       ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
; name servers - NS records
     IN      NS      ns1.test3.yourdomain.com.

; name servers - A records
ns1.test3.yourdomain.com.          IN      A       10.12.0.1

; 10.12.0.0/16 - A records
test3.yourdomain.com.        IN      A      10.12.0.1

編輯反解設定
# vim /etc/named/zones/db.10.12
$TTL    604800
@       IN      SOA     test2.yourdomain.com. test3.yourdomain.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers
      IN      NS      ns1.test2.yourdomain.com.
      IN      NS      ns1.test3.yourdomain.com.

; PTR Records
0.1   IN      PTR     ns1.test2.yourdomain.com.    ; 10.12.0.1
0.1   IN      PTR     ns1.test3.yourdomain.com.    ; 10.12.0.1
0.1   IN      PTR       test2.yourdomain.com.  ; 10.12.0.1

0.1   IN      PTR       test3.yourdomain.com.  ; 10.12.0.1

檢查bind 設定檔語法
# named-checkconf
檢查zone file
# named-checkzone test2.yourdomain.com /etc/named/zones/db.test2.yourdomain.com
zone test2.yourdomain.com/IN: loaded serial 3
OK
這邊 檢查時需特別注意,named-checkzone後的test2.yourdomain.com需換成你正確的域名,否則會報 ignoring out-of-zone data 的警告
# named-checkzone  12.10.in-addr.arpa /etc/named/zones/db.10.12
zone 12.10.in-addr.arpa/IN: loaded serial 3
OK

啟動bind9
# service named start

最後用nslookup檢查是否設定成功
# nslookup
> server 10.12.0.1
Default server: 10.12.0.1
Address: 10.12.0.1#53
> test2.yourdomain.com
Server:         10.12.0.1
Address:        10.12.0.1#53

編輯 /etc/ocserv/ocserv.conf ,讓手機連上VPN後優先選擇內網的DNS
dns = 10.12.0.1
dns = 8.8.8.8
dns = 8.8.4.4
然後重啟oscerv

最後手機連上VPN後訪問 test2.yourdomain.com,成功


參考資料:
https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-centos-7  How To Configure BIND as a Private Network DNS Server on CentOS 7
http://blog.ltns.info/linux/openwrt_ocserv_vpn_client_smart_proxy/  OpenWrt路由器搭建和配置ocserv实现VPN客户端智能代理


2016年3月30日 星期三

Cloudflare 使用心得

原本在 匯智 http://domain.wis.com.tw/ 買的網址,結果內建的代管只能放6筆記錄
看了這篇 https://sofree.cc/cloudflare-free-cdn/ 後,決定試試 Cloudflare
Cloudflare 優點:
DNS代管服務
減少主機流量與資源消耗
阻擋惡意攻擊
加速網站瀏覽速度
免費不限流量的CDN - 查不到你實際網站IP若是台灣主機,通常就不建議開CDN功能,因為,Cloudflare並沒有台灣的節點,大多數都讀取美國檔案,這樣反而繞路

CDN是什麼呢?
全名是「內容傳遞網路」(Content delivery network或Content distribution network),簡單說就是CDN伺服器會分散於全球各地,而這些伺服器會去抓取你網站的內容快取,而如果你人在美國,讀取了有掛CDN的網站,它就會就近讀取美國節點的網站,儘管網站在台灣,你也會感覺瀏覽速度不差。透過分散式的節點,可以分散網站的資源使用,如果你存取的美國節點失效,它會在就近找一個新的節點存取資料,讓資料不間斷。

先說結論:
因為我的主機用linode,一個月有2 TB Transfer,加上又是自己一個人用。所以只用得到DNS代管服務。

Cloudflare 註冊
前略
最後一步會跟你說把原本的Nameservers 改成 Cloudflare 的Nameservers
然後登入 匯智 後台,把所有DNS記錄刪除,然後點 "A、MX、CNAME紀錄關閉"
再將DNS設成 Cloudflare的DNS
然後開啟Cloudflare後台菜單就可以開始設定DNS了。只是免費版新設定的子網域紀錄反應會比較慢(真的有點慢,我這邊等了20分鐘才ping到)

後台點選DNS菜單後,列表中Status可以切換要不要啟用CDN功能
啟用:
啟用後ping到的ip位址是Cloudflare的ip位址
停用:
會直接ping到你真實ip

使用dnstracer 查你設的 主DNS和次DNS
http://blog.xuite.net/happyman/tips/26266122-dnstracer+%E4%BD%BF%E7%94%A8
$ dnstracer  -c -o -q ns your.domain -s . -4
Tracing to your.domain[ns] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4)
 |\___ a.gtld-servers.net [com] (192.5.6.30)
 |     |\___ alice.ns.cloudflare.com [your.domain] (2400:cb00:2049:0001:0000:0000:adf5:3a3c) Not queried
 |     |\___ alice.ns.cloudflare.com [your.domain] (173.245.58.60) Got authoritative answer
 |     |\___ rob.ns.cloudflare.com [your.domain] (2400:cb00:2049:0001:0000:0000:adf5:3b8c) Not queried
 |      \___ rob.ns.cloudflare.com [your.domain] (173.245.59.140) Got authoritative answer
...
但其實不用這麼麻煩,因為dig也可以,而且dig比較通用
$ dig @168.95.1.1 your.domain -t ns
...
;; ANSWER SECTION:
your.domain.            86400   IN      NS      alice.ns.cloudflare.com.
your.domain.            86400   IN      NS      rob.ns.cloudflare.com.