众所周知,RouterOS的IP隧道(GRE、IPIP、EoIP以及它们的IPv6版本)里面都有一个IPSec Secret选项,两台RouterOS设备之间只要填写了相同的密钥,IPSec就会自动建立起来。姑且不说RouterOS默认的IPSec配置有多么的不安全,对于某些场景(比如运营商拦截了GRE但是你恰好又想要一个GRE),这个配置还是简单方便的。那么,如果隧道的对端不是RouterOS设备,这个快速设置还能不能用呢?答案当然是可以的。下面我们以Linux上的StrongSwan为例,实现一个GRE/IPSec隧道的配置。
安装StrongSwan:
1 |
apt install charon-systemd libcharon-extra-plugins libstrongswan-extra-plugins |
记得启用StrongSwan的systemd日志功能,方便调试。在/etc/strongswan.d/charon-systemd.conf
配置:
1 2 3 4 5 6 |
charon-systemd { journal { cfg = 2 ike = 2 } } |
IPSec配置(其中尖括号部分需要根据实际情况填写),放到/etc/swanctl/conf.d/<any-name>.conf
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
connections { <any-name-for-connection> { local_addrs = <local-ip> remote_addrs = <remote-ip> local { auth = psk id = <local-ip> } remote { auth = psk id = <remote-ip> } # phase 1 version = 1 rekey_time = 86400 proposals = aes128-sha1-modp2048 dpd_delay = 120 dpd_timeout = 600 children { <any-name-for-child-sa> { # phase 2 rekey_time = 5400 esp_proposals = aes256-sha1-modp1024 mode = transport local_ts = dynamic[gre] remote_ts = dynamic[gre] hw_offload = auto start_action = trap close_action = trap } } } } secrets { ike-<any-name> { id-local = <local-ip> id-remote = <remote-ip> secret = <your-secret> } } |
proposal之类的设置对应RouterOS的IPSec设置里面相应default项的设置即可,那些cipher的语法可以参考IKEv2 Cipher Suites,具体各个设置项的对应关系如下:
应用StrongSwan设置:
1 |
systemctl restart strongswan-swanctl |
然后配置GRE隧道:
1 2 |
ip tunnel add gre1 mode gre remote <remote-ip> local <local-ip> ttl 255 ip link set gre1 up |
就可以啦。
参考: