在VPN閘道上建立 ipsec only 服務

最近剛好有在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

留言

粗體斜體刪除線連結引用圖片程式碼

注意:您的電子信箱將不會被公開,且網站連結不會被搜尋引擎採計

{124} {123} {122} {121} {120} {119} {118} {117} {116} {115} {114} {113} {112} {111} {100} {025} {024} {023} {022} {021} {020} {019} {018} {017} {016} {015} {014} {013} {012} {011} {010} {009} {008} {007} {006} {005} {004} {003} {002} {001}