如何在 Linux 中使用 Openswan 创建站点到站点 IPsec VPN 隧道如何在 Linux 中使用 Openswan 创建站点到站点 IPsec VPN 隧道如何在 Linux 中使用 Openswan 创建站点到站点 IPsec VPN 隧道如何在 Linux 中使用 Openswan 创建站点到站点 IPsec VPN 隧道
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 中使用 Openswan 创建站点到站点 IPsec VPN 隧道

虚拟专用网络 (VPN) 隧道用于通过 Internet 上的隧道安全地互连两个物理上独立的网络。当单独的网络是具有全局不可路由的私有 IP 地址的私有 LAN 子网时,需要使用隧道,这些子网无法通过 Internet 上的传统路由相互访问。例如,通常部署 VPN 隧道来连接属于同一机构的不同 NAT 分支机构网络。

有时,VPN 隧道也可能仅用于其安全优势。服务提供商或私营公司可能会以这样的方式设计其网络:将重要服务器(例如数据库、VoIP、银行服务器)放置在仅可由受信任人员通过 VPN 隧道访问的子网中。当需要安全的 VPN 隧道时,IPsec 通常是首选,因为 IPsec VPN 隧道具有多层安全性。

本教程将展示如何在 Linux 中使用 Openswan 轻松创建站点到站点 VPN 隧道。

测试拓扑

本教程将重点介绍用于创建 IPsec 隧道的以下拓扑。

安装软件包并准备 VPN 服务器

通常,您将仅管理 site-A,但根据要求,您可以同时管理 site-A 和 site-B。我们通过安装 Openswan 开始该过程。

在基于 Red Hat 的系统(CentOS、Fedora 或 RHEL)上:


# yum install openswan lsof

在基于 Debian 的系统(Debian、Ubuntu 或 Linux Mint)上:


# apt-get install openswan

现在,我们使用以下命令在服务器中禁用 VPN 重定向(如果有):


# for vpn in /proc/sys/net/ipv4/conf/*; 
# do echo 0 > $vpn/accept_redirects; 
# echo 0 > $vpn/send_redirects; 
# done

接下来,我们修改内核参数以允许 IP 转发并永久禁用重定向。


# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

重新加载 /etc/sysctl.conf:


# sysctl -p

我们在防火墙中允许必要的端口。请确保这些规则不与现有的防火墙规则冲突。


# iptables  -A INPUT  -p udp  --dport 500  -j ACCEPT
# iptables  -A INPUT  -p tcp  --dport 4500  -j ACCEPT
# iptables  -A INPUT  -p udp  --dport 4500  -j ACCEPT

最后,我们为 NAT 创建防火墙规则。


# iptables   -t nat   -A POSTROUTING   -s site-A-private-subnet   -d site-B-private-subnet   -j SNAT --to site-A-Public-IP

请确保防火墙规则是持久的。

笔记:

  • 您可以使用 MASQUERADE 而不是 SNAT。从逻辑上讲它应该可以工作,但它导致我过去在使用虚拟专用服务器(VPS)时遇到问题。所以如果我是你,我会使用 SNAT。

  • 如果您也在管理 site-B,请在 site-B 服务器中创建类似的规则。

  • 直接路由不需要SNAT。

准备配置文件

我们将使用的第一个配置文件是ipsec.conf。无论您配置哪个服务器,始终将您的站点视为左,将远程站点视为右。以下配置是在 siteA 的 VPN 服务器中完成的。


# vim /etc/ipsec.conf

## general configuration parameters ##

config setup
        plutodebug=all
        plutostderrlog=/var/log/pluto.log
        protostack=netkey
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        ## disable opportunistic encryption in Red Hat ##
        oe=off

## disable opportunistic encryption in Debian ##
## Note: this is a separate declaration statement ##
include /etc/ipsec.d/examples/no_oe.conf 

## connection definition in Red Hat ##
conn demo-connection-redhat
        authby=secret
        auto=start
        ike=3des-md5
        ## phase 1 ##
        keyexchange=ike
        ## phase 2 ##
        phase2=esp
        phase2alg=3des-md5
        compress=no
        pfs=yes
        type=tunnel
        left=<siteA-public-IP>
        leftsourceip=<siteA-public-IP>
        leftsubnet=<siteA-private-subnet>/netmask
        ## for direct routing ##
        leftsubnet=<siteA-public-IP>/32
        leftnexthop=%defaultroute
        right=<siteB-public-IP>
        rightsubnet=<siteB-private-subnet>/netmask

## connection definition in Debian ##
conn demo-connection-debian
        authby=secret
        auto=start
        ## phase 1 ##
        keyexchange=ike
        ## phase 2 ##
        esp=3des-md5
        pfs=yes
        type=tunnel
        left=<siteA-public-IP>
        leftsourceip=<siteA-public-IP>
        leftsubnet=<siteA-private-subnet>/netmask
        ## for direct routing ##
        leftsubnet=<siteA-public-IP>/32
        leftnexthop=%defaultroute
        right=<siteB-public-IP>
        rightsubnet=<siteB-private-subnet>/netmask

可以通过多种不同的方式进行身份验证。本教程将介绍预共享密钥的使用,该密钥添加到文件 /etc/ipsec.secrets 中。


# vim /etc/ipsec.secrets

siteA-public-IP  siteB-public-IP:  PSK  "pre-shared-key"
## in case of multiple sites ##
siteA-public-IP  siteC-public-IP:  PSK  "corresponding-pre-shared-key"

启动服务和故障排除

服务器现在应该已准备好创建站点到站点 VPN 隧道。如果您也管理 site-B,请确保您已使用必要的参数配置 site-B 的服务器。对于基于 Red Hat 的系统,请确保使用 chkconfig 命令将服务添加到启动中。


# /etc/init.d/ipsec restart

如果两端服务器都没有错误,则隧道现在应该已启动。考虑到以下因素,您可以使用 ping 命令测试隧道。

  1. site-B 的私有子网不应从 site-A 访问。也就是说,如果隧道未启动,ping 应该不起作用。

  2. 隧道建立后,尝试从 site-A ping 到 site-B 的私有子网。这应该有效。

此外,到目标私有子网的路由应出现在服务器的路由表中。


# ip route

[site-B's private-subnet] via [siteA-gateway] dev eth0 src [siteA-public-IP]
default via [site-A's gateway] dev eth0

此外,我们可以使用以下有用的命令检查隧道的状态。


# service ipsec status

IPsec running  - pluto pid: 20754
pluto pid 20754
1 tunnels up
some eroutes exist

# ipsec auto --status

## output truncated ##
000 "demo-connection-debian":     myip=<siteA-public-IP>; hisip=unset;
000 "demo-connection-debian":   ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0; nat_keepalive: yes
000 "demo-connection-debian":   policy: PSK+ENCRYPT+TUNNEL+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,28; interface: eth0;

## output truncated ##
000 #184: "demo-connection-debian":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 1653s; newest IPSEC; eroute owner; isakmp#183; idle; import:not set

## output truncated ##
000 #183: "demo-connection-debian":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 1093s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:not set

日志文件 /var/log/pluto.log 还应包含有关身份验证、密钥交换和隧道不同阶段信息的有用信息。如果您的隧道没有出现,您也可以检查那里。

如果您确定所有配置均正确,但隧道仍未启动,则应检查以下事项。

  1. 许多 ISP 都会过滤 IPsec 端口。确保您的 ISP 允许 UDP/500、TCP/UDP/4500 端口。您可以尝试通过 telnet 从远程位置连接到服务器 IPsec 端口。

  2. 确保服务器的防火墙允许必要的端口。

  3. 确保两个终端服务器中的预共享密钥相同。

  4. 左右参数应在两端服务器上正确配置。

  5. 如果您遇到 NAT 问题,请尝试使用 SNAT 而不是 MASQUERADING。

总而言之,本教程重点介绍使用 Openswan 在 Linux 中创建站点到站点 IPSec VPN 隧道的过程。 VPN 隧道对于增强安全性非常有用,因为它们允许管理员仅通过隧道提供关键资源。 VPN 隧道还确保传输中的数据不被窃听或拦截。

希望这可以帮助。让我知道你的想法。

©2015-2025 艾丽卡 support@alaica.com