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 / 问题 / 678291
Accepted
BaseZen
BaseZen
Asked: 2015-03-26 13:29:54 +0800 CST2015-03-26 13:29:54 +0800 CST 2015-03-26 13:29:54 +0800 CST

Amazon EC2:OpenVPN 服务器不会将桥接数据包从客户端路由到 VPC 子网

  • 772

我在 Amazon EC2 VPC 的 Linux 服务器上设置了桥接 OpenVPN。(花了几个小时在文档上,阅读类似的问题,在这里,openVPN 论坛,还没有运气。)

桥接接口已启动并包含两个子接口:

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.0e7c15e787b0       no              eth0
                                                        tap0

VPN服务器上的路由显然没问题;我可以通过 SSH 连接、ping 通、响应来自客户端的 VPN 请求:

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG        0 0          0 br0
10.0.0.0        0.0.0.0         255.255.0.0     U         0 0          0 br0

我可以从 Windows 和 Mac 客户端 ping 到 VPN 服务器的 IP,但不能 ping 到 VPC 子网上的任何其他 IP。(那些其他 IP 没问题;它们可以从 VPN 服务器 ping 通。)

当我在VPN 服务器tcpdump上的网桥接口上时,它会看到来自 Windows 客户端的“ARP​​ who-has”请求。但是它们不会进入 VPC 子网!在目标 IP 上看不到 ARP 到达。Windows arp 缓存仍未填充。(10.0.0.128 是 Windows 客户端;10.0.0.58 是 VPN 服务器;10.0.0.180 是子网上的另一个 IP;下面的输出来自 VPN 服务器。)br0tcpdump

root@vpn:# tcpdump -i br0 arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:00:21.092367 ARP, Request who-has 10.0.0.180 tell 10.0.0.128, length 28

[蟋蟀]

我已禁用源/目标。检查 VPN 服务器唯一网络接口上的 EC2 控制台。

我已经按照桥接 HOWTO 中的建议设置了 IP 表,并且通常完全按照这些说明进行操作。

# iptables -L INPUT -v
Chain INPUT (policy ACCEPT 9 packets, 1008 bytes)
 pkts bytes target     prot opt in     out     source               destination
   38 12464 ACCEPT     all  --  tap0   any     anywhere             anywhere
10447 1297K ACCEPT     all  --  br0    any     anywhere             anywhere

# iptables -L FORWARD -v
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  918  167K ACCEPT     all  --  br0    any     anywhere             anywhere

https://openvpn.net/index.php/open-source/documentation/miscellaneous/76-ethernet-bridging.html

我认为我不需要转储完整的配置,因为显然很多工作都在起作用:身份验证、证书、压缩、地址池、连接设置。Amazon VPC 是否只是拒绝转发数据包,而我真的应该在一个稍微不那么虚拟的云上来执行此操作?

第二天的更多实验:VPC 显然不像真正的第 2 层子网。特别是,ARPwho-has广播实际上并不广播!当我从 .180 ping 一个不存在的 IP(比如 0.5)时,.58 看不到请求。如果已通过管理控制台/API 在 VPC 中配置了.5,则 VPC 显然正在优化 ARP 广播并将其仅发送到 .5 。保留tcpdump -vv -i eth0 arp一段时间仅显示所有主机的主机和网关之间的流量。

此外,ping 子网上的广播地址根本不起作用。这得到了 Amazon VPN 常见问题的支持。

因此 VPC 可能拒绝识别 .129 的未知 MAC 地址,因为它不存在于它自己的“虚拟以太网交换机”中。我可能会在一周左右的时间内将此作为答案。要使用您自己的 VPN 扩展 VPC,它必须通过正式的“VPC 网关”,该网关仅设计为由专用硬件路由器和静态 IP 支持的公司 Intranet 的扩展,而不是漫游笔记本电脑场景 I'米的目标。

linux
  • 1 1 个回答
  • 2395 Views

1 个回答

  • Voted
  1. Best Answer
    Michael - sqlbot
    2015-03-27T09:55:57+08:002015-03-27T09:55:57+08:00

    您的 VPN 需要路由,而不是桥接,并且您的 VPN 客户端所在的子网必须在 VPC 超网的范围之外。

    然后,您在 VPC 路由表中为 VPN 客户端子网添加静态路由,该路由的目标指定为您的 vpn 服务器实例的实例 ID。

    VPC 网络是一个虚拟的、软件定义的网络。它不是一个纯粹的第 2 层网络,但在大多数方面,它可以很好地模拟一个。然而,广播并不是其中一种方式。

    如果您注意到,从一个实例到另一个实例的 ARP 流量并没有 1:1 的相关性。您对 ARP 的响应who-has并非来自分配了 IP 的实例。它来自网络。如果目标实例实际看到传入的请求,它实际上并没有看到您发送的请求。

    VPC 以这种方式设计是出于一些非常令人信服的原因,其中包括可扩展性和安全性。

    VPC 超网范围内的 IP 地址预计会出现在实例上,这一事实只是其副作用。即使您使用可用的硬件 vpn 解决方案,您仍然不能在该链接另一侧的 VPC 超网中拥有私有地址......所以这不是一个让您支付额外费用的限制......这只是设计的一部分。

    推荐观看:VPC/十亿包生命中的一天(CPN401)

    http://m.youtube.com/watch?v=Zd5hsL-JNY4

    • 6

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

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