Linux的: Ubuntu 18.04.4 LTS(GNU/Linux 4.15.0-91-通用 x86_64)
- Eth0 1.1.1.1/32 外部IP
- ipip-ipsec0 192.168.0.1/30 將是我們的隧道
米克托伊克: CCR 1009、路由器作業系統 6.46.5
- Eth0 10.0.0.2/30 來自提供者的內部 IP。 提供者的外部 NAT IP 是動態的。
- ipip-ipsec0 192.168.0.2/30 將是我們的隧道
我們將使用 racoon 在 Linux 電腦上建立 IPsec 隧道。 細節我就不描述了,有一個很好的
安裝所需的軟件包:
sudo install racoon ipsec-tools
我們配置racoon,它將有條件地充當ipsec伺服器。 由於主模式下的mikrotik 無法傳輸額外的客戶端標識符,並且它連接到Linux 的外部IP 位址是動態的,因此使用預先共用金鑰(密碼授權)將不起作用,因為密碼必須與下列IP 位址匹配:連接主機,或帶有識別符。
我們將使用 RSA 金鑰進行授權。
racoon 守護程式使用 RSA 格式的金鑰,mikrotik 使用 PEM 格式。 如果您使用 racoon 隨附的 plainrsa-gen 實用程式產生金鑰,那麼您將無法在其幫助下將 Mikrotika 的公鑰轉換為 PEM 格式 - 它僅向一個方向轉換:PEM 到 RSA。 openssl 和 ssh-keygen 都無法讀取 plainrsa-gen 產生的金鑰,因此也無法使用它們進行轉換。
我們將使用 openssl 產生一個 PEM 金鑰,然後使用 plainrsa-gen 將其轉換為 racoon:
# Генерируем ключ
openssl genrsa -out server-name.pem 1024
# Извлекаем публичный ключ
openssl rsa -in server-name.pem -pubout > server-name.pub.pem
# Конвертируем
plainrsa-gen -i server-name.pem -f server-name.privet.key
plainrsa-gen -i server-name.pub.pem -f server-name.pub.key
我們將收到的金鑰放在資料夾中:/etc/racoon/certs/server。 不要忘記將啟動 racoon 守護程式的使用者(通常是 root)的擁有者設定為 600 權限。
我將描述透過 WinBox 連接時的 mikrotik 設定。
將 server-name.pub.pem 金鑰上傳到 mikrotik:選單「檔案」-「上傳」。
開啟“IP”部分 - “IP sec” - “金鑰”標籤。 現在我們產生金鑰 - “Generate Key”按鈕,然後匯出 mikrotika 公鑰「Expor Pub. Key”,您可以從“檔案”部分下載它,右鍵單擊該檔案 - “下載”。
我們導入 racoon 公鑰,“導入”,在“文件名”字段的下拉列表中查找我們之前下載的 server-name.pub.pem。
mikrotik公鑰需要轉換
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
並將其放入 /etc/racoon/certs 資料夾中,不要忘記所有者和權限。
附註解的 racoon 設定:/etc/racoon/racoon.conf
log info; # Уровень логирования, при отладке используем Debug или Debug2.
listen {
isakmp 1.1.1.1 [500]; # Адрес и порт, на котором будет слушать демон.
isakmp_natt 1.1.1.1 [4500]; # Адрес и порт, на котором будет слушать демон для клиентов за NAT.
strict_address; # Выполнять обязательную проверку привязки к указанным выше IP.
}
path certificate "/etc/racoon/certs"; # Путь до папки с сертификатами.
remote anonymous { # Секция, задающая параметры для работы демона с ISAKMP и согласования режимов с подключающимися хостами. Так как IP, с которого подключается Mikrotik, динамический, то используем anonymous, что разрешает подключение с любого адреса. Если IP у хостов статический, то можно указать конкретный адрес и порт.
passive on; # Задает "серверный" режим работы демона, он не будет пытаться инициировать подключения.
nat_traversal on; # Включает использование режима NAT-T для клиентов, если они за NAT.
exchange_mode main; # Режим обмена параметрами подключения, в данном случае ---согласование.
my_identifier address 1.1.1.1; # Идентифицируем наш linux хост по его ip адресу.
certificate_type plain_rsa "server/server-name.priv.key"; # Приватный ключ сервера.
peers_certfile plain_rsa "mikrotik.pub.key"; # Публичный ключ Mikrotik.
proposal_check claim; # Режим согласования параметров ISAKMP туннеля. Racoon будет использовать значения подключающегося хоста (инициатора) для срока действия сессии и длины ключа, если его срок действия сессии больше, или длина его ключа короче, чем у инициатора. Если срок действия сессии короче, чем у инициатора, racoon использует собственное значение срока действия сессии и будет отправлять сообщение RESPONDER-LIFETIME.
proposal { # Параметры ISAKMP туннеля.
encryption_algorithm aes; # Метод шифрования ISAKMP туннеля.
hash_algorithm sha512; # Алгоритм хеширования, используемый для ISAKMP туннеля.
authentication_method rsasig; # Режим аутентификации для ISAKMP туннеля - по RSA ключам.
dh_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана при согласовании ISAKMP туннеля.
lifetime time 86400 sec; Время действия сессии.
}
generate_policy on; # Автоматическое создание ESP туннелей из запроса, пришедшего от подключающегося хоста.
}
sainfo anonymous { # Параметры ESP туннелей, anonymous - указанные параметры будут использованы как параметры по умолчанию. Для разных клиентов, портов, протоколов можно задавать разные параметры, сопоставление происходит по ip адресам, портам, протоколам.
pfs_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана для ESP туннелей.
lifetime time 28800 sec; # Срок действия ESP туннелей.
encryption_algorithm aes; # Метод шифрования ESP туннелей.
authentication_algorithm hmac_sha512; # Алгоритм хеширования, используемый для аутентификации ESP туннелей.
compression_algorithm deflate; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}
微控制器配置
返回“IP”部分 - “IPsec”
“個人資料”選項卡
參數
值
姓名
由您自行決定(預設預設)
哈希算法
sha512
加密演算法
AES-128
DH集團
模組p2048
提案檢查
聲稱
永久
1 天 00:00:00
NAT穿越
正確(選中該框)
DPD
120
DPD 最大故障
5
同行選項卡
參數
值
姓名
由您自行決定(以下簡稱 MyPeer)
地址
1.1.1.1(IP Linux 機器)
本地地址
10.0.0.2(IP WAN 介面 mikrotik)
個人資訊
默認
交換方式
主
被動
假
寄 INITIAL_CONTACT
真
提案選項卡
參數
值
姓名
由您自行決定(以下稱為 MyPeerProposal)
授權。 演算法
sha512
恩克里。 演算法
aes-128-CBC
永久
08:00:00
PFS集團
模組p2048
「身分」標籤
參數
值
Peer 手機側揹袋
我的同行
阿圖。 方法
RSA金鑰
關鍵
mikrotik.privet.key
遙控鑰匙
伺服器名稱.pub.pem
策略範本組
默認
諾軌道鏈
空的
我的身分證類型
汽車
遠程 ID 類型
汽車
匹配依據
遠程ID
模式配置
空的
生成策略
沒有
選項卡“策略 - 常規”
參數
值
Peer 手機側揹袋
我的同行
隧道
真
來源。 地址
192.168.0.0/30
目的地。 地址
192.168.0.0/30
協議
255(全部)
模板
假
選項卡“策略 - 操作”
參數
值
行動
加密
水平
要求
IPsec 協定
ESP
建議
我的同儕提案
最有可能的是,像我一樣,您在 WAN 介面上配置了 snat/masquerade;需要調整此規則,以便傳出 ipsec 封包進入我們的隧道:
轉到“IP”-“防火牆”部分。
「NAT」選項卡,開啟我們的 snat/masquerade 規則。
進階選項卡
參數
值
IPsec 策略
輸出:無
重啟浣熊惡魔
sudo systemctl restart racoon
如果 racoon 在重新啟動時未啟動,則設定中存在錯誤;在 syslog 中,racoon 顯示偵測到錯誤的行號的資訊。
當作業系統啟動時,racoon 守護程序在網路介面啟動之前啟動,並且我們在監聽部分指定了 strict_address 選項;您需要將 racoon 單元新增至 systemd 檔案中
/lib/systemd/system/racoon.service,在 [Unit] 部分中,行 After=network.target。
現在我們的 ipsec 隧道應該已啟動,請查看輸出:
sudo ip xfrm policy
src 192.168.255.0/30 dst 192.168.255.0/30
dir out priority 2147483648
tmpl src 1.1.1.1 dst "IP NAT через который подключается mikrotik"
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir fwd priority 2147483648
tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir in priority 2147483648
tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnel
如果隧道未啟動,請查看系統日誌或journalctl -u racoon。
現在您需要設定 L3 介面以便可以路由流量。 有不同的選擇,我們將使用 IPIP,因為 mikrotik 支援它,我會使用 vti,但不幸的是,它尚未在 mikrotik 中實現。 它與IPIP的不同之處在於它可以額外封裝組播並在資料包上放置fwmarks,透過這些資料包可以在iptables和iproute2(基於政策的路由)中進行過濾。 如果您需要最大程度的功能,那麼可以選擇 GRE。 但不要忘記,我們為額外的功能付出了巨大的開銷。
可以看一篇很好的隧道介面評論的翻譯
在 Linux 上:
# Создаем интерфейс
sudo ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
# Активируем
sudo ip link set ipip-ipsec0 up
# Назначаем адрес
sudo ip addr add 192.168.255.1/30 dev ipip-ipsec0
現在您可以為 mikrotik 後面的網路新增路由
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
為了使我們的介面和路由在重新啟動後能夠啟動,我們需要在 /etc/network/interfaces 中描述介面並在後期添加路由,或將所有內容寫入一個文件中,例如 /etc/ ipip-ipsec0. conf 並透過post-up 拉取它,不要忘記檔案擁有者、權限並使其可執行。
下面是一個範例文件
#!/bin/bash
ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
ip link set ipip-ipsec0 up
ip addr add 192.168.255.1/30 dev ipip-ipsec0
ip route add A.B.C.D/Prefix via 192.168.255.2
關於米克羅蒂克:
在「Interfaces」部分,新增一個新介面「IPtunnel」:
選項卡“IP 隧道”-“常規”
參數
值
姓名
由您自行決定(以下簡稱 IPIP-IPsec0)
MTU
1480(如果未指定,mikrotik 開始將 mtu 削減到 68)
本地地址
192.168.0.2
遠程地址
192.168.0.1
IPsec 秘密
停用該欄位(否則將建立一個新的對等點)
活著
停用該欄位(否則介面將不斷關閉,因為 mikrotika 對於這些軟體包有自己的格式,並且不適用於 Linux)
數據中心
繼承
不要碎片化
沒有
箝位 TCP MSS
真
允許快速路徑
真
“IP”-“位址”部分,新增位址:
參數
值
地址
192.168.0.2/30
介面
IPIP-IPsec0
現在您可以新增至 Linux 機器後面的網路的路由;新增路由時,網關將是我們的 IPIP-IPsec0 介面。
PS
由於我們的 Linux 伺服器是可傳遞的,因此為其上的 ipip 介面設定 Clamp TCP MSS 參數是有意義的:
建立包含以下內容的檔案 /etc/iptables.conf:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
和 /etc/network/interfaces 中
後製 iptables-restore < /etc/iptables.conf
我在 mikrotik (ip 10.10.10.1) 後面的網路上運行 nginx,使其可以從互聯網訪問,將其添加到 /etc/iptables.conf:
*nat
-A PREROUTING -d 1.1.1.1/32 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.10.10.1
#На mikrotik, в таблице mangle, надо добавить правило route с назначением 192.168.0.1 для пакетов с адресом источника 10.10.10.1 и портов 80, 443.
# Так же на linux работает OpenVPN сервер 172.16.0.1/24, для клиентов которые используют подключение к нему в качестве шлюза даем доступ в интернет
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT
如果啟用了封包過濾器,請不要忘記在 iptables 中新增適當的權限。
保持健康!
來源: www.habr.com