我正在尝试构建一个 OpenVPN 网关从我的私有云平台->进入这办公室网络。我已成功在我的一个 EC2 实例上设置 VPN 客户端(我们将其命名为“网关”),现在它具有 VPN 虚拟接口“tun0”。
现在,我想将所有与办公室相关的流量(dst 172.20.0.0/16)从 VPC 中的其余 EC2 实例路由到“网关”的网络接口(10.0.0.100)。
我尝试了两种不同的方法:
- 在相关的 AWS 路由表中添加新规则:172.20.0.0/16 -> eni-XXX(其中 eni-XXX 是“网关”接口的 id);
- 更新 EC2 的路由表:route add -net 172.20.0.0 netmask 255.255.0.0 gw 10.0.0.100
两种方法似乎都失败了,因为在网关上运行“tcpdump -i eth0 'src port not 22 and dst port not 22'”并且 curl/ping 内部办公室 ips 没有任何结果 :(
有人知道哪里出了问题吗?或者有人能为我的问题提供更好的解决方案吗?
第二个问题。一旦我的流量到达网关的 eth0,我计划使用以下 IpTables 命令将其转发到 VPN 连接中:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i eth0 -s 10.0.0.0/16 -o tun0 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
我应该预料到这里会出现什么问题吗(除了启用 IP 转发)?
答案1
你的方法不够理想。你应该使用 AWS虚拟专用网关将您的办公室连接到您的 VPN,而不是连接到一个 EC 实例上的 VPN 并尝试从那里进行路由。
试试看,文档很好,如果您遇到问题,您可能应该提出一个新问题。如果您无法使用此解决方案,则应编辑您的问题以包含有关您的用例的更多详细信息。
答案2
好的,我的主要问题是 AWS - 默认情况下它不允许在 EC2 实例之间路由流量。要解决这个问题,应该禁用源/目标检查针对您的“网关”实例。之后,在 AWS 路由表中添加一条路由,将所有以办公室为目标的流量重定向到您的“网关”ec2 实例(例如 172.20.0.0/16 -> eni-XXX - 其中 eni-XXX 是网关接口的 ID),这样就可以正常工作了。
至于将流量从公网接口(eth0)转发到OpenVpn虚拟网络接口,iptables可以很容易地解决这个问题:
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE
iptables -A FORWARD -i eth0 -s 10.0.0.0/16 -d 172.20.0.0/16 -o tun0 -j ACCEPT
其中“10.0.0.0/16”是 VPC 子网,“172.20.0.0/16”是办公网络。当然,还要启用 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
vim /etc/sysctl.conf <- net.ipv4.ip_forward = 1
感谢大家的回复。