AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 635012
Accepted
dorian
dorian
Asked: 2014-10-11 01:45:36 +0800 CST2014-10-11 01:45:36 +0800 CST 2014-10-11 01:45:36 +0800 CST

为什么 IPsec 隧道只需要 3 个 ip xfrm 策略?

  • 772

我在strongswan(v5.2.0)实例(站点 A)和RouterOS路由器(站点 B)之间建立并运行了一个站点到站点 IPsec 隧道。一切正常,为站点 A ( 10.10.0.0/16) 和 B ( 10.50.0.0/16) 设置的两个私有子网中的主机可以正常通信。

我不明白的是ip xfrm policy站点 A 的路由器的以下输出(公共 IP 被混淆)。这些策略是由创建的strongswan,我没有手动安装或修改它们:

ip xfrm policy 
src 10.50.0.0/16 dst 10.10.0.0/16 
    dir fwd priority 2947 ptype main 
    tmpl src <PUBLIC_IP_B> dst <PUBLIC_IP_A>
        proto esp reqid 1 mode tunnel
src 10.50.0.0/16 dst 10.10.0.0/16 
    dir in priority 2947 ptype main 
    tmpl src <PUBLIC_IP_B> dst <PUBLIC_IP_A>
        proto esp reqid 1 mode tunnel
src 10.10.0.0/16 dst 10.50.0.0/16 
    dir out priority 2947 ptype main 
    tmpl src <PUBLIC_IP_A> dst <PUBLIC_IP_B>
        proto esp reqid 1 mode tunnel

每个输入和输出都有一个策略,但只有一个用于转发(从站点 B 到站点 A)。但我仍然可以成功 ping,例如,10.50.4.11从10.10.0.89:

ping -R 10.50.4.11
PING 10.50.4.11 (10.50.4.11): 56 data bytes
64 bytes from 10.50.4.11: icmp_seq=0 ttl=62 time=10.872 ms
RR:     10.10.0.89
    10.50.0.1
    10.50.4.11
    10.50.4.11
    10.50.4.11
    10.10.0.2
    10.10.0.89

关于此路由跟踪的有趣部分是站点 A 的路由器 ( 10.10.0.2) 仅显示在从 ping 目标返回的路由上,而站点 B 的路由器 ( 10.50.0.1) 仅针对传出路由列出。

这似乎证实了站点 A 的路由器实际上不需要转发策略10.10.0.0/16来10.50.0.0/16通过 IPsec 隧道转发,但我不明白为什么。

感谢您的任何解释!

ip
  • 3 3 个回答
  • 17670 Views

3 个回答

  • Voted
  1. Best Answer
    ecdsa
    2014-10-11T04:30:14+08:002014-10-11T04:30:14+08:00

    fwd策略不是由内核自动生成的,而是由键控守护程序(在本例中为 strongSwan)安装的。

    它们需要允许流量在隧道模式下转发到和来自 VPN 网关后面的主机。

    对于指向未安装在网关本身上的 IP 地址的入站数据包,在解密后会搜索转发策略。对于本地流量,查找策略中的匹配项。如果没有找到,则丢弃数据包。

    对于 VPN 网关本身未生成的出站流量,将搜索转发策略。如果数据包未加密,则如果没有找到匹配的转发策略,则不会失败。如果流量在两条隧道之间转发,则与一个安装的入站转发策略将充当另一个的出站转发策略,反之亦然。之后,查找出策略以决定是否通过隧道传输数据包。这就是为什么通常不需要出站方向的转发策略的原因。

    但是,如果有一个低优先级的丢弃/阻止转发策略匹配所有内容(例如,如果没有建立隧道,避免明文流量通过网关),则明确需要出站方向的转发策略,因为阻止策略将否则丢弃所有未加密的流量。这就是为什么 strongSwan 开始使用5.5.0双向安装fwd策略。


    该答案的先前版本指出,单一(入站)fwd策略是对称的(即src和dst在任一方向上工作)。这不是真的,但正如上面所解释的,在许多情况下这并不重要。

    • 9
  2. hth
    2021-01-04T01:57:54+08:002021-01-04T01:57:54+08:00

    来自Andrej Stender 的这篇文章:

    安全政策 句法 意义
    “输出政策” 目录 SP 用作传出数据包的选择器,以选择哪些要加密+封装,哪些不
    “输入政策” 目录 SP在已经被解密+解码的传入数据包上工作,并在系统上具有目的地IP本地
    “前进政策” 目录转发 SP在已经被解密的+分解的传入数据包上工作,并且具有不本地的目标IP,因此可以转发(路由)的数据包

    所以:

    • out用于我们想用 IPsec 加密+封装的传出流量(本地和转发)。
    • in并fwd用于传入的 IPsec流量,并应用于封装在 IPsec 内的数据包:
      • in应用于目的 IP 为此计算机的内部数据包
      • fwd应用于应进一步转发的内部数据包

    编辑:我在 Linux 5.9.1 上进行了自己的本地实验,ip xfrm结果与 Andrej 的表相匹配。

    • 3
  3. Shfer
    2020-09-29T01:08:56+08:002020-09-29T01:08:56+08:00

    这似乎证实了站点 A 的路由器实际上不需要转发策略来通过 IPsec 隧道将 10.10.0.0/16 转发到 10.50.0.0/16,但我不明白为什么。

    这是因为 A 只想从 B 接收 IPsec 流量。

    从 A 到 B 的 IPsec 流量将 A 的 IP 地址作为目标 IP 地址 - 因此它由dir inA 上的策略处理。
    从 IPsec 中提取封装的 IP 数据包后,它们被移交给内核以获得对传入 IP 数据包的标准 linux 处理-xfrm policy dir fwd这里不需要。

    src 10.10.0.0/16 dst 10.50.0.0/16 dir fwd ...如果您还需要从 B 接收非 IPsec 流量,则可以添加关于 A 的策略。

    • 1

相关问题

  • 共享服务器IP

  • Windows 中执行反向 DNS 查找的命令行实用程序是什么?

  • 如何找到 ubuntu 盒子的默认网关

  • 我怎样才能得到一个网站的IP地址?

  • 如何让我的计算机将自己称为 192.168.1.* 上的任何 ip?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve