通过 Openswan 建立 Linux-Linux 之间的 VPN 隧道

写在开头的话

其实这个实验还没有做完,一方面虚拟机环境里面有些内容已经很难实现(可能是先天缺陷),有空的时候我会对这个实验进行抓包,来给自己排错。但目前由于公司环境需求,我必须进行 Subversion 的学习了。

一、网络架构

必须模拟出两个网段来做这个实验。于是就有了这样的结构:

net

点击图片查看大图。

我们将网段分为了三个:

10.10.0.0/24:模拟公网网段,两个网关可以在这里互相访问。
172.16.1.0/24:Left子网。
172.16.2.0/24:Right子网。

通常我们在做实验的时候,将两个子网分别命名为 LeftRight

二、Openswan

Openswan 是一套基于 Ipsec 的 Linux 工具。类似的工具还有 Strongswan 和 早已停止开发的 Freeswan
Openswan 的 wiki 详细列出了 他与 Strongswan 在功能上的区别

三、系统环境

由于我不太喜欢自己编译,所以选择了 Debian 系统。使用 CentOS 的用户可能需要自己下载源代码编译 Openswan。

1. Sysctl 配置

编辑 /etc/sysctl.conf ,确保有以下内容:

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.eth2.send_redirects=0
net.ipv4.conf.eth1.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.eth2.accept_redirects=0
net.ipv4.conf.eth1.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.forwarding=1

forwarding 参数大家肯定已经很熟悉了,用网关做 NAT 时肯定会用到。其他参数是我在排错的时候一点一点添加进去的。具体的用途也还不清楚。等弄懂了添加上来。

若此步没有做好,在执行 ipsec verify 的时候会报错。

2. 软件安装

apt-get install openswan

openswan-1

安装过程中会出现一系列配置提示,一般选择默认即可。

openswan-2

这里不用开启。

openswan-3

是否创建 Host key。选择是。

openswan-4

Key 的加密类型。

openswan-5

配置 Openswan 使用key。这里“是”“否”,我都选过,其实无大碍。后面可以自己生成 key。

openswan-6

选择 Yse。

基本的系统环境就已经有了。

3.检查 ipsec 的状态

通过 ipsec verify 命令检查状态,正常输出如下:

debian:/etc# ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.4.6/K2.6.18-4-686 (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [OK]
Checking for RSA private key (/etc/ipsec.secrets) [OK]
Checking that pluto is running [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking NAT and MASQUERADEing [N/A]
Checking for ‘ip’ command [OK]
Checking for ‘iptables’ command [OK]
Opportunistic Encryption Support [DISABLED]

若不正常,请按照 Sysctl 配置 里面的内容修改配置文件。

四、配置 Openswan

1. 在两台服务器上生成 Hostkey。

生成 key : ipsec newhostkey --output /etc/ipsec.secrets
在 LeftSrv 上 showkey:ipsec showhostkey --left
在 RightSrv 上 showkey:ipsec showhostkey --right

在 showkey 时我们会得到类似一下的输出:

# RSA 2192 bits ubuntu-latteye Sun Sep 30 08:25:11 2007 leftrsasigkey=0sAQOe8Y5AxAmgh0yki8QAMmiBGxC….

记住他,后面需要添加进 ipsec.conf 文件中。

2. 配置 ipsec.conf

以下是我的配置文件:

conn a
left=10.10.0.2
leftsubnet=172.16.1.0/24
leftid=@left
leftrsasigkey=0sAQOe8Y5AxAmgh0yki8QA….
leftnexthop=%defaultroute
right=10.10.0.3
rightsubnet=172.16.2.0/24
rightid=@right
rightrsasigkey=0sAQNS9hPmgmzkwDMHqDZ…
rightnexthop=%defaultroute
auto=add

conn a: 给这个连接起个名字 a
left:左网关地址
right:右网关地址
leftsubnet:左子网环境地址
rightsubnet:右子网环境地址
leftid,rightid:只是标识,起个名字。
leftnexthop:下一跳路由地址。
left or rightrsasigkey:上面showhostkey出来的内容就添加在这后面。注意!left和right一定要区分开!
auto=add:手动启动链接。

五、启动链接

ipsec auto --up a

——————————————–

我的实验就到此为止了,由于是虚拟机,在生成 key 和 链接的时候出现了一些问题。系统没有任何反映,CPU 使用也没有增加,就卡在那里。但是真实机器并不会这样。

这个实验何时能有进展,我会继续修改此文。

这里的中断并不会影响 ipsec-fortigate 的实验。我已经了解了 ipsec 的工作配置方式。

3 Comments

  1. [...] 几个月前初步尝试了 Openswan,但是在最后连接的时候出现了一些问题。所以实验暂停了。 [...]

  2. kith 说:

    为什么
    Checking that pluto is running [Failed]?
    如何解决?
    注: net.ipv4.conf.forwarding=1

  3. latteye 说:

    pluto 应该在 ipsec 服务启动的时候被自动加载。是否已经启动 ipsec 服务了呢?

Leave a Reply