MikroTik RouterOS VPN (PPTP / L2TP / OpenVPN / SSTP / SSH Tunnel / IPSec / IKEv2)

Difficulty: ★★★☆☆
Version: RouterOS v6.25
Protocol: PPTP / L2TP over IPSec / OVPN / SSTP / SSH
Mode: Client-to-Site VPN CLI Setting

這篇文章主要作為一個紀錄,針對VPN的設定,提供給剛踏入RouterOS世界的朋友們參考,也方便未來能在Google上直接搜尋到關鍵字而省去爬樓的時間。使用場景為電腦或手持設備連線至VPN Server,只紀錄CLI的部份,如需圖文或基本使用入門請直接參閱本站另一棟專業大樓[研究所] MikroTik RouterOS 學習 (持續更新)

在RouterOS啟用這些VPN Server的同時,有以下幾個項目需要視個別情況作設定,所以寫在前面

/ip pool
add name=VPN_Pool ranges=192.168.88.100-192.168.88.150
add name=OVPN_Pool ranges=192.168.88.32/30

/ppp profile
set [find name=default-encryption] dns-server=192.168.88.1 local-address=192.168.88.1 remote-address=VPN_Pool
add name=OpenVPN dns-server=192.168.88.1 local-address=192.168.88.32 remote-address=OVPN_Pool use-encryption=yes change-tcp-mss=yes

/ppp secret
add name=帳號 password=密碼 profile=default

.PPTP (Point to Point Tunneling Protocol)
有關PPTP的詳細說明,可以參考MikroTik PPTP
/interface pptp-server server
set authentication=mschap2 default-profile=default-encryption enabled=yes

/ip firewall filter
add chain=input dst-port=1723 protocol=tcp
add chain=input protocol=gre

PPTP的設定只要使用上面的CLI,基本上就可以連線了,在電腦或iOS裡面新增VPN,輸入帳號與密碼即可

.L2TP over IPSec (Layer 2 Tunneling Protocol over Internet Protocol Security)
有關L2TP的詳細說明,可以參考MikroTik L2TP
/interface l2tp-server server
set authentication=mschap2 enabled=yes

/ip ipsec proposal
set [ find default=yes ] enc-algorithms=aes-128-cbc,aes-192-cbc,aes-256-cbc lifetime=8h pfs-group=none

/ip ipsec peer
add enc-algorithm=aes-128,aes-192,aes-256 exchange-mode=main-l2tp generate-policy=port-override lifetime=8h passive=yes secret=密鑰 send-initial-contact=no

/ip firewall filter
add chain=input dst-port=1701,500,4500 protocol=udp
add chain=input protocol=ipsec-esp

L2TP/IPSec的設定只要使用上面的CLI,基本上就可以連線了,在電腦或iOS裡面新增VPN,輸入帳號、密碼與密鑰即可。

-=Apple iOS額外注意事項=-
在RouterOS v6.25上有一點要注意,因為當你使用以下CLI,系統會自動幫你完成IPSec的設定,但是若要在iOS上能正常連線,則IPSec中Peer的generate-policy要設成port-override,而以下CLI的預設值是port-strict
/interface l2tp-server server
set authentication=mschap2 enabled=yes ipsec-secret=密鑰

.OpenVPN (Open Source VPN)
有關OpenVPN的詳細說明,可以參考MikroTik OVPN
/certificate
import file-name=OpenSSL_CA.crt
import file-name=OpenSSL_CA.key

/interface ovpn-server server
set auth=sha1 certificate=匯入OpenSSL_CA後的名稱 cipher=blowfish128,aes128,aes192,aes256 default-profile=OpenVPN enabled=yes

/ip firewall filter
add chain=input dst-port=1194 protocol=tcp

RouterOS的設定按照以上CLI即可,而OpenVPN需要用到CA的Certificate與Private Key,這部份可以自己產生,利用NAS或是Linux/MacOS上的OpenSSL來跑,以下是範例,會產生上面CLI需要的OpenSSL_CA.key與OpenSSL_CA.crt。亦可以參考MikroTik Create Certificates
openssl genrsa -des3 -out OpenSSL_CA.key 2048
openssl req -new -x509 -days 365 -key OpenSSL_CA.key -out OpenSSL_CA.crt

然後在電腦端的採用以下設定就可以連線了 (RouterOS.ovpn)
client
dev tun
proto tcp
remote 改成RouterOS的IP 1194
keepalive 10 120
auth SHA1
auth-user-pass
cipher AES-256-CBC
verb 5
redirect-gateway def1
dhcp-option DNS 8.8.4.4
ca OpenSSL_CA.crt

若是要用iPhone/iPad連OpenVPN,則要再多以下步驟:

1. 產生iOS要用的Certificate與Private Key,這會需要用到剛剛CA的Certificate與Private Key
openssl genrsa -des3 -out iOS.key 2048
openssl req -new -key iOS.key -out iOS.csr
openssl x509 -req -days 365 -in iOS.csr -CA OpenSSL_CA.crt -CAkey OpenSSL_CA.key -set_serial 01 -out iOS.crt

2. 設定檔改成如下所示 (iOS.ovpn)
client
dev tun
proto tcp
remote 改成RouterOS的IP 1194
keepalive 10 120
auth SHA1
auth-user-pass
verb 5
redirect-gateway def1
dhcp-option DNS 8.8.4.4
ca OpenSSL_CA.crt
cert iOS.crt
key iOS.key

然後將iOS.ovpn / iOS.crt / iOS.key / OpenSSL_CA.crt 用iTunes匯入iOS裡的OpenVPN App

3. 或者設定檔改成如下所示 (Client.ovpn)
client
dev tun
proto tcp
remote 改成RouterOS的IP 1194
keepalive 10 120
auth SHA1
auth-user-pass
verb 5
redirect-gateway def1
dhcp-option DNS 8.8.4.4

<ca>
-----BEGIN CERTIFICATE-----
OpenSSL_CA.crt的內容
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
iOS.crt的內容
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
iOS.key的內容
-----END RSA PRIVATE KEY-----
</key>

然後將Client.ovpn透過Email附件的方式由OpenVPN App開啟

4. 在iOS的設定->OpenVPN->Force AES-CBC ciphersuites,這個選項要關閉因為OpenVPN App使用128-bit、CBC模式的Blowfish。若沒關閉則會發生Transport Error。

5. 打開OpenVPN App,依序輸入使用者帳號、iOS.key的密碼(pass phrase, not challenge password)、使用者密碼,即可連線

6. 如果不是完全依循上面的流程設定,而無法連線時,請看一下Log檔是否有出現以下訊息:
TUN Error: tun_prop_error: ifconfig addresses are not in the same /30 subnet (topology net30)

這說明在使用OpenVPN連線時,Local Address與Remote Address不在同一個/30的子網域內,請修正

7. Apple iOS 8+版本的iPhone/iPad可以開啟「Seamless tunnel」,這樣一來可以在暫停、恢復、重連線時仍維持VPN連線為有效狀態

.SSTP (Secure Socket Tunneling Protocol)
有關SSTP的詳細說明,可以參考MikroTik SSTP
/certificate
import file-name=StartSSL_CA.crt
import file-name=StartSSL_CA.key

/interface sstp-server server
set certificate=匯入StartSSL_CA後的名稱 default-profile=default-encryption enabled=yes force-aes=yes

RouterOS的設定按照以上CLI即可,而SSTP需要用到CA的Certificate與Private Key,可以按照上面產生iOS用的Certificate與Private Key的方始產生,但是Client端就要匯入這些自行產生的憑證。或者參考pctine大的SSTP client to server 從憑證建立到設定詳解,申請第三方公正單位提供的憑證。

然後在電腦上透過SSTP連線軟體,輸入Domain name及帳號與密碼即可連線,注意一定要是Domain name而不是IP喔

.SSH Tunnel (Secure Shell Tunnel)
有關SSH的詳細說明,可以參考MikroTik SSH
/ip service
set ssh disabled=no

/ip ssh
set forwarding-enabled=yes

RouterOS的設定按照以上CLI即可,主要是確定有開啟SSH服務及打開SSH的forward功能。接下來只要在電腦端設定好SOCKS Proxy即可連線,其中Proxy指向127.0.0.1而Port則指向PuTTY、iSSH(MacOS)、SSH Proxy(MacOS)設定的port

.IPSec (Internet Protocol Security)
有關IPSec的詳細說明,可以參考MikroTik IPSec

這裡補充2樓gfx的CLI設定而應用於Apple iOS上。
/ip ipsec mode-config
add address-pool=VPN_Pool name=Cisco_Mode split-include=其他Subnet

/ip ipsec policy group
add name=Cisco_Group

/ip ipsec proposal
set [ find default=yes ] enc-algorithms=aes-128-cbc,aes-192-cbc,aes-256-cbc \
lifetime=8h pfs-group=none

/ip ipsec peer
add auth-method=pre-shared-key-xauth enc-algorithm=aes-128,aes-192,aes-256 generate-policy=port-strict lifetime=8h mode-config=Cisco_Mode passive=yes policy-template-group=Cisco_Group secret=密鑰

/ip ipsec policy
add dst-address=VPN_Pool網段 group=Cisco_Group src-address=其他Subnet tunnel=yes template=yes
add dst-address=其他Subnet group=Cisco_Group src-address=VPN_Pool網段 tunnel=yes template=yes

/ip ipsec user
add name=帳號 password=密碼

其中Mode Config、Policy Group、Policy Template是用來解決generate-policy所帶來的其他問題,譬如Client端可以產生任何Policy並存取任何區網段

.IKEv2 (Internet Key Exchange v2)
Version: RouterOS v6.39

有關IKEv2的詳細說明,可以參考MikroTik Road Warrior Setup IKEv2 RSA Auth

Step 1:建立Certificate,之前OpenVPN採用OpenSSL的方式來產生Certificate,這邊採用RouterOS內建的功能來作示範
/certificate
add common-name=RouterOS_CA name=ROS_CA key-size=4096 days-valid=3650
sign ROS_CA ca-crl-host=RouterOS的IP

add common-name=RouterOS的FQDN subject-alt-name=IP:RouterOS的IP key-size=4096 days-valid=3650 key-usage=tls-server name=Server
sign Server ca=ROS_CA

add common-name=IKEv2_Client key-size=4096 days-valid=3650 key-usage=tls-client name=Client
sign Client ca=ROS_CA

Step 2:設定IPSec
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha256,sha1 enc-algorithms=aes-128-cbc,aes-192-cbc,aes-256-cbc lifetime=8h pfs-group=none

/ip ipsec mode-config
add address-pool=VPN_Pool address-prefix-length=32 system-dns=yes name=IKEv2 split-include=其他Subnet

/ip ipsec peer
add auth-method=rsa-signature certificate=Server dh-group=modp2048 enc-algorithm=aes-256 exchange-mode=ike2 generate-policy=port-strict hash-algorithm=sha256 mode-config=IKEv2 passive=yes

Step 3:匯出Certificate
/certificate export-certificate ROS_CA
/certificate export-certificate Client export-passphrase=自行設定的密碼

此時應該會產生三個檔案 cert_export_ROS_CA.crt, cert_export_Client.key, cert_export_Client.crt。這時我們需要使用額外的工具如OpenSSL來將.crt與.key的檔案轉換成PKCS12的格式(副檔名為.pfx)
openssl pkcs12 -export -out RouterOS.pfx -inkey cert_export_Client.key -in cert_export_Client.crt -certfile cert_export_ROS_CA.crt

Step 4:將產生的RouterOS.pfx與cert_export_ROS_CA.crt匯入手機或電腦(例如透過電子郵件寄送給自己後,在手機上打開,先安裝cert_export_ROS_CA.crt,再安裝RouterOS.pfx,這時需要輸入匯出Certificate時自行設定的密碼

Step 5:設定IKEv2 VPN,以Apple iOS為例
1. 類型:IKEv2
2. 描述:欲識別的名稱
3. 伺服器:RouterOS的FQDN或IP
4. 遠端識別碼:RouterOS的FQDN或IP
5. 本機識別碼:
6. 使用者認證:無
7. 使用憑證:啟用
8. 憑證:IKEv2_Client (產生憑證時所設定的Common Name)

然後就可以透過IKEv2 VPN連線了

補充:VPN比較
MikroTik RouterOS VPN (PPTP / L2TP / OpenVPN / SSTP / SSH Tunnel / IPSec / IKEv2)

延伸閱讀
[開箱] MikroTik CCR1016-12G
MikroTik RouterOS QoS (Queue/HTB/PCQ)
MikroTik RouterOS Stateless Tunnel (EoIP/IPIP/GRE)
MikroTik RouterOS IGMP Proxy w/ CHT MOD
MikroTik RouterOS Hairpin NAT - Pros & Cons
MikroTik RouterOS Hotspot
MikroTik RouterOS User Manager - RADIUS
MikroTik RouterOS Load Balancing - Pros & Cons
利用IPSec Xauth PSK讓Android與ROS連接.


Mikrotik官網有提到這是Road Warrior服務
http://wiki.mikrotik.com/wiki/Manual:IP/IPsec

不過要注意當您打開IPSec Xauth PSK Server ,
IPSec挪作用途後勢必影響,L2TP/IPSec PSK將暫時無法使用

1./ip pool 建立ipsec-RW Pool


2./ip ipsec mode-config 建立Road Warrior設定檔


3./ip ipsec policy group 建立RoadWarrior群組


4./ip ipsec policy 建立IPSec政策



5./ip ipsec user 建立IPSec用戶帳號/密碼


6./ip ipsec proposal 設定IPSec加密協定


7./ip ipsec peer 建立peer 及預先共用金鑰


8.沒有<步驟8>啦,直接看Android手機連線成果


補充:
因變更過/ip ipsec proposal的default加密選項,
所以L2TP/IPSec PSK的peer也要跟著修正,以方便日後再利用.


/ip ipsec peer是可切換的

所以您想要用L2TP/IPSec PSK連線,您只要將Road Warrior關閉就好;
反之您想使用IPSec Xauth PSK ,只要再將Road Warrior打開便可
gfx wrote:
利用IPSec Xa...(恕刪)
設定IPSec Xauth PSK過程發現有MTU的問題,
導致像IPv6一樣,如Yahoo或Facebook之類的網站無法正常瀏覽

不過IPSec設定內並無MTU怎麼辦?
這類的問題不難解決,有Change MSS方式可以替代應變.


我的VPN-Pool為172.19.15.0/29 ,所以只要加入下列的命令問題即可排除!!
/ip firewall mangle
add action=change-mss chain=forward comment="Change MSS" new-mss=\
clamp-to-pmtu protocol=tcp src-address=172.19.15.0/29 tcp-flags=syn
add action=change-mss chain=forward dst-address=172.19.15.0/29 new-mss=\
clamp-to-pmtu protocol=tcp tcp-flags=syn
感謝分享啦!
我倒想知道這幾種VPN對使用者之差異,更多人想知道單純從大陸翻牆出來那種最方便使用.

canerhsu wrote:
感謝分享啦!我倒想知...(恕刪)

sstp是您最佳的選擇,但sstp-server也是最難搞的.
sstp需要Microsoft認可的憑證,與ovpn可用軟體生成的憑證不同.

也就是架sstp-server前,得先花錢準備憑證啦

gfx wrote:
也就是架sstp-server前,得先花錢準備憑證啦...(恕刪)


印象中之前如果用 RouterOS 當 SSTP VPN server, 可以不需要憑證就可以連線.
FB: Pctine

gfx wrote:
sstp是您最佳的選...(恕刪)


感謝分享啦!但我想知道為何SSTP最適合大陸連回台灣來使用呢?
日前朋友使用我NAS提供之PPTP,在大陸使用還算OK.

canerhsu wrote:
感謝分享啦!但我想知...(恕刪)


PPTP連線沒有SSTP穩定, 特定是大陸一些重要的日子.
canerhsu wrote:
感謝分享啦!但我想知...(恕刪)

因為SSTP的憑證是Microsoft所認可的,
所以SSTP封包易受Windows電腦或相關防火牆允許接受.

另外一點是預設連接埠是TCP Port:443 ,一般防火牆並不會去檔.
因為TCP Port:443是https的連接埠,若防火牆不俱封包解析而任意阻檔,
會讓用戶無法正常瀏覽網頁. (也就是SSTP混夾在遊覽器封包內)

就算長城俱封包解析能力封鎖SSTP使用TCP Port:443 ,
SSTP也可以隨意更換其它的連接埠,不像PPTP(TCP Port:1723)是固定的,
避開監聽被封鎖的風險.
pctine wrote:
印象中之前如果用 RouterOS 當 SSTP VPN server, 可以不需要憑證就可以連線.


這或許是site-to-site SSTP VPN,Client-to-site SSTP VPN似乎依舊需要憑證。

題外話,現在SSTP就Windows好用,Mac OS的EasySSTP已經無法註冊購買了的樣子,SourceForge的SSTP-Client還沒成功在Mac OS上連線過
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!