我在路由器后面本地运行 LEMP 服务器。一切正常。因为我希望我的 IP 地址不暴露给世界,所以我试图通过运行 Ubuntu 18.04 的 AWS 实例来隧道传输 Web 服务器。我“认为”,这就像构建 AWS Ubuntu OpenVPN 云服务器、通过终端中的 openvpn 将我的本地 Web 服务器连接到该服务器,然后更改我的 dns A 记录以指向 Amazon VPN 服务器的 IP 地址一样简单。
显然,我遗漏了一些东西,因为我已经完成了上述所有假设,但我仍然无法让我的网络服务器在我的 AWS IP 地址上提供流量。
我的设置:我的本地 Web 服务器已通过 openvpn 成功连接到我的 ubuntu aws 实例。我的本地 Web 服务器正在正确接收我的 aws 实例的 IP 地址。Openvpn 服务器似乎运行正常。我的 DNS 配置有指向我的 AWS 实例 IP 地址的 A 记录。我可以通过隧道浏览互联网,whatsmyip.org 显示正确的 aws IP 地址。
在 EC2 实例上,输出ip addr show
为
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel state UP group default qlen 1000
link/ether 0e:86:bb:81:3b:dd brd ff:ff:ff:ff:ff:ff
inet 172.31.47.112/20 brd 172.31.47.255 scope global dynamic eth0
valid_lft 3208sec preferred_lft 3208sec
inet6 fe80::c86:bbff:fe81:3bdd/64 scope link
valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::2405:76a5:410a:17a7/64 scope link stable-privacy
valid_lft forever preferred_lft forever
在本地网络服务器上,输出ip addr show
为
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:14:6d:e1 brd ff:ff:ff:ff:ff:ff
inet 192.168.30.32/24 brd 192.168.30.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::815e:ba7:5be8:1fb5/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether dc:a6:32:14:6d:e2 brd ff:ff:ff:ff:ff:ff
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.3/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::292b:b09f:9ac9:2cc7/64 scope link stable-privacy
valid_lft forever preferred_lft forever
在我的 EC2 实例上,输出sudo iptables -t nat -vnL
是:
Chain PREROUTING (policy ACCEPT 396 packets, 22897 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 173 packets, 8430 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 361 packets, 44271 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 361 packets, 44271 bytes)
pkts bytes target prot opt in out source destination
223 14467 SNAT all -- * * 10.8.0.0/24 !10.8.0.0/24 to:172.31.47.112
在我的本地服务器上,输出sudo iptables -t nat -vnL
是:
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
据我所知,我的 IP 地址在重新启动或重启 VPN 服务器时不会改变。最后,为了在 EC2 端设置 VPN 服务器,请遵循以下指南,以防您想查看:
https://linuxhint.com/vpn_amazon_ec2_setup/
经过这样的设置后,我的网络服务器就不再为亚马逊 IP 地址提供流量了。
谁能告诉我我到底遗漏了什么以及如何补救?
答案1
您不需要通过 VPN 将 AWS 实例上的流量转发 /dnat 端口回去(也许绑定到隧道 IP 和/或本地防火墙上的 Web 服务器 - 但 dnat 对我们来说是最重要的)。
您尚未提供您的地址,但您的 AWS iptables/防火墙实例上很可能有一个 NAT 伪装规则,以允许从您的 VPN 进行浏览。您还需要确保 AWS 允许 http(s) 的入站连接。您需要添加一条规则,例如 (未经测试)
更新
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.8.0.3:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 10.8.0.3:443
您需要确保在重启时将这些规则添加到您的 AWS 服务器。第一个规则用于 http,第二个规则用于 https。
如果您将 AWS 盒子想象成虚拟 SOHO 路由器 - 路由器/AWS 盒子默认配置为允许出站连接,但不知道将传入连接重定向到何处。以上几行相当于在路由器中设置端口转发,以将进入路由器外部地址的流量重定向到服务器的内部 IP。
我们知道 Web 服务器的 IP 地址是 10.8.0.3,因为“ip address show”输出的第 4 个条目用于运行接口,即 openvpn 隧道。