通过 OpenVPN 从 AWS VPC 路由流量

通过 OpenVPN 从 AWS VPC 路由流量

我需要从我的 AWS VPC 私有子网访问一些可通过 OpenVPN 访问的主机。我的 VPC 设置与描述的类似这里。

在私有网络内,我创建了一个 EC2 实例,它使用以下命令设置了一个 OpenVPN 客户端:

openvpn --verb 3 --config config.ovpn  --script-security 2 --up up.sh

up.sh脚本文件内容:

#!/bin/bash

/sbin/sysctl -w net.ipv4.ip_forward=1
/sbin/iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT 2>&1
/sbin/iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED \
-j ACCEPT 2>&1
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE 2>&1

假设 171.20.0.0/16 是 VPN 后面的子网。私有子网的路由表如下所示:

DESTINATION    TARGET
10.0.0.0/16    local
0.0.0.0/0      nat-gateway
171.20.0.0/16  ec2-instance-with-openvpn-client

我正在使用默认安全组。

我的问题是,我无法从私有子网内 ECS 集群中运行的 Docker 映像访问 VPN 后面的主机。OpenVPN 客户端运行正常,因为我可以直接从 EC2 实例访问 VPN 后面的主机。从我观察到的情况来看,我认为来自 Docker 的流量永远不会到达 EC2 实例,但我对此并不 100% 确定。

答案1

VPC 网络是软件定义的网络——模拟以太网的 3 层网络。默认情况下,网络不允许流量传入或传出没有该实例的确切地址作为源地址或目标地址(取决于流量的方向)的 EC2 实例...因此对于这种情况,必须禁用检查。

更改源或目标检查

源/目标检查属性控制是否在实例上启用源/目标检查。禁用此属性可使实例能够处理并非专门发往实例的网络流量。例如,运行网络地址转换、路由或防火墙等服务的实例应将此值设置为disabled。默认值为enabled

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#change_source_dest_check

相关内容