OpenVPN 未解析 HTTP/s 请求 - 连接到授权 VPN 时无法到达 AWS 私有 API 网关的端点

OpenVPN is not resolving HTTP/s requests - Can't reach AWS private API Gateway's endpoint when connected to an authorized VPN

OpenVPN 未正确解析 HTTP/s。

我创建了一个私有 API 网关,我想通过在与 API 网关相同的 VPC 中创建的 execute-api 端点中配置的私有 DNS 访问该网关。

我可以从同一 VPC 中创建的其他资源访问它。但我希望我的客户也能访问它,只连接到我的 VPN OpenVPN server,但他们无法访问。

然而 OpenVPN server 能够到达 API,但客户不能。

我认为这里失败的是 OpenVPN Server 没有正确重定向 HTTP/s 请求,就像它对 SSH 连接所做的那样。

对于 SSH 连接,VPN 运行良好。

这可能是由于缺少某些配置造成的。在 OpenVPN 服务器或客户端中。

有什么想法吗?

感谢任何帮助。

亲切的问候,

Rshad

已解决。

问题是 OpenVPN 服务器无法推送 DNS 配置,尽管 API 端点主机名未解析。

在下文中,我们描述了解决此问题的基本步骤和问题。

1。 VPC DNS 问题

不管OpenVPN客户端DNS转发的问题,我们想手动使用VPC DNS,我的意思是自己在配置文件/etc/resolv.conf中设置如下:

nameserver <VPC DNS>
<default interface>

我们尝试设置与我们的 VPC 关联的 DNS,它由字段 IPv4 CIDR 表示,我们将其视为 10.0.0.0。尝试使用此 DNS 无法正常工作,因为我们分配了无效的 DNS。多查了下,发现aVPC环境提供的DNS服务器是VPC网络范围的基础加2,所以这样就=>10.0.0.2,或者我们可以用一个通用的169.254.169.253.

提醒一下


> (0 to 255 inclusive),其中一个是网络地址(.0),另一个是网络广播地址(.255)。

这样,如果我们检查我们的客户端是否识别 DNS​​,我们 运行:

vagrant@manager:~$ nslookup 172.*.*.2
2.0.31.172.in-addr.arpa name = ip-172-*-*-2.us-east-2.compute.internal.

Authoritative answers can be found from:

vagrant@manager:~$ 

我们还 运行 dig API 端点主机名来检查 returned IP。在这种情况下,它应该 return 3 个 IP,我们与端点关联的每个子网 1 个。

vagrant@manager:~$ dig pwcc7wokgi.execute-api.us-east-2.amazonaws.com

; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> pwcc7wokgi.execute-api.us-east-2.amazonaws.com        
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17511
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:
;pwcc7wokgi.execute-api.us-east-2.amazonaws.com.        IN A

;; ANSWER SECTION:pwcc7wokgi.execute-api.us-east-2.amazonaws.com. 4 IN CNAME 
execute-api.us-east-2.amazonaws.com. 4 IN A     172.*.*.*
execute-api.us-east-2.amazonaws.com. 4 IN A     172.*.*.*
execute-api.us-east-2.amazonaws.com. 4 IN A     172.*.*.*

;; Query time: 116 msec;; SERVER: 169.254.169.253#53(169.254.169.253);; WHEN: Tue Oct 22 17:04:35 UTC 2019
;; MSG SIZE  rcvd: 137

vagrant@manager:~$

2。将 DNS 转发到 OpenVPN 客户端

为此,我们必须在服务器配置文件中添加以下行。

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 169.254.169.253"
push "dhcp-option DNS 172.*.*.2"

第一行不仅在 DNS 转发的情况下是必要的,而且将所有来自代理的流量重定向到服务器。

带有dhcp-option DNS的行对应于我们要添加到客户端的DNS,其中1个就足够了。

2.1 问题

当客户端无法通过服务器或客户端本身更新时,我们遇到了一些问题。 DNS 配置。文件 /etc/resolv.conf 总是被默认值覆盖:

nameserver 127.0.0.53

这不是我们的情况。经过一些调试我们发现:

  1. 我们没有安装 resolveconf 库,因为它对 OpenVPN 转发 DNS 时必不可少。 OpenVPN 使用两个配置文件如果需要,在连接或断开 VPN 连接时使用脚本 /sbin/resolveconf 覆盖文件 /etc/resolv.conf

在客户端配置中。文件

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
  1. dnsmasq 也可以覆盖默认值 /etc/resolv.conf - Not a fixed case 在我们的例子中,我需要在连接到 VPN 时禁用 dnsmasq,这样 OpenVPN 就无法转发 DNS,因为 /etc/resolv.conf 总是会覆盖它。

  2. 如果对dnsmasq进行了更改,建议重新启动network-manager


有效日志消息

Tue Oct 22 17:17:16 2019 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 169.254.169.253,dhcp-option DNS 10.0.0.2,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM'

dhcp-option DNS 169.254.169.253
dhcp-option DNS 10.0.0.2

亲切的问候,

Rshad