Linux跨平台编译StrongSwan Windows版
最近在研究市面上的Windows版本的IPSec客户端,但发现基本对于IKEv1都不支持(如有遗漏支持的,请留言给我,谢谢大佬),所以对我来说,就剩一条路了,用strongwan的windows版本,我们登上官网下载一波发行包:
真到下载页面就傻眼了,并没有给出windos版本:
我迅速google了一番strongswan win都没有现成的包,最坏的情况真的出现了,我需要自己编译StrongSwan Windos版,苦笑中。
1. 跨平台编译
对着这篇文档开始:https://docs.strongswan.org/docs/5.9/os/windows.html
编译windows版本有两种方法,第一个是在linux平台使用mingw工具链去跨平台编译,第二种是windos平台去做编译,我看大差不差,官方也推荐第一种,那就第一种搞起。
本人的安装环境如下:
# 操作系统
>>lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
# 国内镜像源
>>vi /etc/apt/sources.list
deb http://cn.archive.ubuntu.com/ubuntu/ jammy main restricted
deb http://cn.archive.ubuntu.com/ubuntu/ jammy universe
deb http://cn.archive.ubuntu.com/ubuntu/ jammy multiverse
deb http://security.ubuntu.com/ubuntu jammy-security main restricted
deb http://security.ubuntu.com/ubuntu jammy-security universe
deb http://security.ubuntu.com/ubuntu jammy-security multiverse
1.1. 安装MinGW
>> apt-get install mingw-w64
>> x86_64-w64-mingw32-
x86_64-w64-mingw32-addr2line x86_64-w64-mingw32-cpp-win32 x86_64-w64-mingw32-gcc-10-win32 x86_64-w64-mingw32-gcc-ranlib x86_64-w64-mingw32-gcov-tool-posix x86_64-w64-mingw32-lto-dump-posix x86_64-w64-mingw32-strings
x86_64-w64-mingw32-ar x86_64-w64-mingw32-c++-win32 x86_64-w64-mingw32-gcc-ar x86_64-w64-mingw32-gcc-ranlib-posix x86_64-w64-mingw32-gcov-tool-win32 x86_64-w64-mingw32-lto-dump-win32 x86_64-w64-mingw32-strip
x86_64-w64-mingw32-as x86_64-w64-mingw32-dlltool x86_64-w64-mingw32-gcc-ar-posix x86_64-w64-mingw32-gcc-ranlib-win32 x86_64-w64-mingw32-gcov-win32 x86_64-w64-mingw32-nm x86_64-w64-mingw32-windmc
x86_64-w64-mingw32-c++ x86_64-w64-mingw32-dllwrap x86_64-w64-mingw32-gcc-ar-win32 x86_64-w64-mingw32-gcc-win32 x86_64-w64-mingw32-g++-posix x86_64-w64-mingw32-objcopy x86_64-w64-mingw32-windres
x86_64-w64-mingw32-c++filt x86_64-w64-mingw32-elfedit x86_64-w64-mingw32-gcc-nm x86_64-w64-mingw32-gcov x86_64-w64-mingw32-gprof x86_64-w64-mingw32-objdump
x86_64-w64-mingw32-c++-posix x86_64-w64-mingw32-g++ x86_64-w64-mingw32-gcc-nm-posix x86_64-w64-mingw32-gcov-dump-posix x86_64-w64-mingw32-g++-win32 x86_64-w64-mingw32-ranlib
x86_64-w64-mingw32-cpp x86_64-w64-mingw32-gcc x86_64-w64-mingw32-gcc-nm-win32 x86_64-w64-mingw32-gcov-dump-win32 x86_64-w64-mingw32-ld x86_64-w64-mingw32-readelf
x86_64-w64-mingw32-cpp-posix x86_64-w64-mingw32-gcc-10-posix x86_64-w64-mingw32-gcc-posix x86_64-w64-mingw32-gcov-posix x86_64-w64-mingw32-ld.bfd x86_64-w64-mingw32-size
>> x86_64-w64-mingw32-gcc -v
Using built-in specs.
COLLECT_GCC=x86_64-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-w64-mingw32/10-win32/lto-wrapper
Target: x86_64-w64-mingw32
Configured with: ../../src/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/include' --mandir='/usr/share/man' --infodir='/usr/share/info' --sysconfdir=/etc --localstatedir=/var --disable-option-checking --disable-silent-rules --libdir='/usr/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --prefix=/usr --enable-shared --enable-static --disable-multilib --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --libdir=/usr/lib --enable-libstdcxx-time=yes --with-tune=generic --with-headers --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libgomp --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-lto --enable-threads=win32 --program-suffix=-win32 --program-prefix=x86_64-w64-mingw32- --target=x86_64-w64-mingw32 --with-as=/usr/bin/x86_64-w64-mingw32-as --with-ld=/usr/bin/x86_64-w64-mingw32-ld --enable-libatomic --enable-libstdcxx-filesystem-ts=yes --enable-dependency-tracking SED=/bin/sed
Thread model: win32
Supported LTO compression algorithms: zlib
gcc version 10-win32 20220113 (GCC)
1.2. 安装StrongSwan
直接官方下载一个5.9.4(因为我的服务端是这个版本,客户端和它保持一致,大家可以用其他的),下载链接如下:https://download.strongswan.org/old/5.x/
tar xjf strongswan-5.9.4.tar.bz2
cd strongswan-5.9.4
CFLAGS="-g -O2 -Wall -Wno-pointer-sign -Wno-format-security \
-Wno-format -mno-ms-bitfields \
-I/c/path/to/openssl/include" \
LDFLAGS="-L/c/path/to/openssl/lib" \
./configure --disable-defaults --enable-monolithic --enable-static \
--enable-svc --enable-ikev2 --enable-ikev1 \
--enable-nonce --enable-pem --enable-pkcs1 \
--enable-openssl \
--enable-x509 --enable-socket-win \
--enable-kernel-wfp --enable-kernel-iph --enable-pubkey \
--enable-swanctl --with-swanctldir=swanctl --host=x86_64-w64-mingw32 \
--with-strongswan-conf=strongswan.conf
一看官网的命令有些懵逼,看来是需要openssl库啊,先不管,直接configure看看:
okk,那就继续安装openssl吧。
1.3. 安装OpensSSL
不能直接安装openssl,因为我们是用mingw做跨平台编译的,需要把openssl share到mingw去,所以还是要下载openssl源码去做share编译,openssl版本我选择了一个和5.9.4差不多年份的,下载路径如下:https://openssl-library.org/source/old/3.0/index.html
$ tar xvzf openssl-3.0.0.tar.gz
$ cd openssl-3.0.0
./Configure --cross-compile-prefix=x86_64-w64-mingw32- --prefix=/usr/local/myOpenssl no-idea no-mdc2 no-rc5 shared mingw64
$ make depend && make && make install
修改strongswan的ssl依赖路径,-I和-L的地方:
CFLAGS="-g -O2 -Wall -Wno-pointer-sign -Wno-format-security \
-Wno-format -mno-ms-bitfields \
-I/usr/local/myOpenssl/include" \
LDFLAGS="-L/usr/local/myOpenssl/lib64" \
./configure --disable-defaults --enable-monolithic --enable-static \
--enable-svc --enable-ikev2 --enable-ikev1 \
--enable-nonce --enable-pem --enable-pkcs1 \
--enable-openssl \
--enable-x509 --enable-socket-win \
--enable-kernel-wfp --enable-kernel-iph --enable-pubkey \
--enable-swanctl --with-swanctldir=swanctl --host=x86_64-w64-mingw32 \
--with-strongswan-conf=strongswan.conf
make
make install DESTDIR=/home/xs/strongswan.win/win.target/
tar -cvf strongswan.win.tar strongswan.win
2. 调试运行
okk,终于没有报错了,我们拷贝到windos电脑里试试:
cmd 执行 winver:
2.1. 环境变量
配合环境变量,将lib文件路径加到环境变量的path里:
2.2. 禁用IKEEXT
按官网说明要禁用这个服务:
2.3. 隧道连接
curl cip.cc
\strongswan.win\usr\local\bin\charon-svc.exe
\strongswan.win\usr\local\sbin\swanctl.exe --load-all
\strongswan.win\usr\local\sbin\swanctl.exe --initiate --child nettun1 4
\strongswan.win\usr\local\sbin\swanctl.exe --list-sas
关闭防火墙,试试对端能不能ping通,验证一下隧道是否穿透成功:
完美~
Reference
https://github.com/Zeranoe/mingw-w64-build
https://github.com/strongswan/strongswan/releases/tag/5.7.2
https://docs.strongswan.org/docs/latest/os/windows.html#_important_notes
https://blog.csdn.net/lengyue2015/article/details/144449310
https://wiki.strongswan.org/iss