我在 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 服务器。)br0
tcpdump
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'米的目标。
您的 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