×

Linux跨平台编译StrongSwan Windows版

hqy hqy 发表于2025-02-12 21:56:53 浏览15 评论0

抢沙发发表评论

研究市面上的Windows版本的IPSec客户端,但发现基本对于IKEv1都不支持(如有遗漏支持的,请留言给我,谢谢大佬),所以对我来说,就剩一条路了,用strongwan的windows版本,我们登上官网下载一波发行包:

真到下载页面就傻眼了,并没有给出windos版本:

我迅速google了一番strongswan win都没有现成的包,最坏的情况真的出现了,我需要自己编译StrongSwan Windos版,苦笑中。

1. 跨平台编译

对着这篇文档开始:docs.strongswan.org/doc

编译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-gccCOLLECT_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(因为我的服务端是这个版本,客户端和它保持一致,大家可以用其他的),下载链接如下:download.strongswan.org

tar xjf strongswan-5.9.4.tar.bz2cd strongswan-5.9.4CFLAGS="-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差不多年份的,下载路径如下:openssl-library.org/sou

$ 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

github.com/Zeranoe/ming

github.com/strongswan/s

docs.strongswan.org/doc

blog.csdn.net/lengyue20

wiki.strongswan.org/iss


打赏

本文链接:https://www.kinber.cn/post/4828.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客