最近剛好有在ipsec中修改特定網址DNS的需求,就試著在ipsec server上同時架設這兩種服務
測試用的環境是vultr的VPS,作業系統是Fedora 25,網路介面只有一個ens3
ipsec server的部份則參照之前的文章作設定
此時ipsec連上後,如果將dns server設為ipsec server對外IP時,會發現dns request全部都走在ipsec通道外面,而且dns server必須接收來自網際網路的查詢
這是因為用戶端上的路由表會將ipsec server設成直接連線,再將default gateway改成ipsec出去,所以必須想其他的辦法來解決這個問題
我的方法是在loopback device上建立IP alias,只要新增底下兩個檔案並重開機即可
# /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 IPADDR=10.10.10.10 NETMASK=255.255.255.255 NETWORK=10.10.10.10 BROADCAST=255.255.255.255 ONBOOT=yes NAME=loopback
# /etc/sysconfig/network-scripts/route-lo 10.10.10.10 dev lo scope link
如此一來,執行ifconfig時可看到loopback裝置已經加上10.10.10.10這個IP
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 1 bytes 49 (49.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1 bytes 49 (49.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 10.10.10.10 netmask 255.255.255.255 loop txqueuelen 1 (Local Loopback)
接著再將dns server設定listen-on 10.10.10.10就完成了
如果無法連線,此時要檢查ens3那邊的防火牆是不是有開啟port 53
我一開始也無法理解為什麼會這樣,不過觀察的結果是ipsec流量一定會會發生在ens3上
即便利用了loopback路由,dns request流量還是會從ens3進來,所以防火牆封鎖ens3進來的port時仍然會被阻擋
這部份我解讀成ipsec tunnel在network layer被kernel處理掉了,看起來就像client直接接在ens3一樣
大概是比較習慣OpenVPN那種TUN device的思維,因此這部份研究了比較久
=====2017/07/01更新=====
如果network scripts沒有反應的話,也可以用systemd做startup script
## /etc/systemd/system/add-loopback-ip.service ## chmod 664 [Unit] After=NetworkManager.service [Service] ExecStart=/usr/local/bin/add-loopback-ip.sh [Install] WantedBy=default.target
## /usr/local/bin/add-loopback-ip.sh ## chmod 744 #!/bin/bash ifconfig lo:0 10.10.10.10 netmask 255.255.255.255 up route add -host 10.10.10.10 dev lo
檔案放好之後執行底下的指令,服務就會被放到開機流程裡
systemctl daemon-reload systemctl enable add-loopback-ip.service
留言