当前位置: 首页 > article >正文

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


http://www.kler.cn/a/534423.html

相关文章:

  • 蓝桥杯思维训练营(三)
  • 音频录制一般在什么情况下会选择保存为PCM?什么情况会选择保存为WAV?
  • 修剪二叉搜索树(力扣669)
  • 设备通过国标GB28181接入EasyCVR,显示在线但视频无法播放的原因排查
  • 2024年12月 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试
  • 二维数组 C++ 蓝桥杯
  • 深度学习篇---计算机视觉任务模型的剪裁、量化、蒸馏
  • Java面试题集合篇5:10道基础面试题
  • C++ RTTI
  • 如何利用i18n实现国际化
  • nginx日志查询top10
  • 代码随想录算法训练营打卡第56天
  • leetcode:LCR 179. 查找总价格为目标值的两个商品(python3解法)
  • ES6 const 使用总结
  • 美团-测试开发面试
  • DeepSeek推理模型架构以及DeepSeek爆火的原因
  • Vue 3 30天精进之旅:Day 15 - 插件和指令
  • 【spring容器管理】bean的生命周期有哪些拓展点?
  • 个人毕业设计--基于HarmonyOS的旅行助手APP的设计与实现(挖坑)
  • Java程序员 面试如何介绍项目经验?
  • 一表总结 Java 的3种设计模式与6大设计原则
  • 蓝桥杯翻转
  • 【100%通过率 】【华为OD机试c++/java/python】日志采集系统【 E卷 | 2023 Q1 |100分】
  • Linux特权组全解析:识别GID带来的权限提升风险
  • C++初阶 -- vector容器的接口详解
  • 机器学习--python基础库之Matplotlib (1) 超级详细!!!