问题描述:
- 阿里云上同一个 VPC 内,有两台 ECS 服务器,其中一台为自己搭的 VPN 网关
- 办公室路由器通过 WireGuard 连接阿里云的 VPN 网关
- 家里路由器亦通过 WireGuard 连接阿里云的 VPN 网关
-
阿里云的网关 ECS 可以与办公室、家里的内网设备正常通信:
- 可互 ping
- 可互相访问 HTTP 服务、SSH 服务
- 因此我判断路由表设置应该都是正确的。
- 另一台 ECS 无法访问办公室内网设备。
- 两台 ECS 处于同一 VPC 内,两个可用区,可互相通信。
- 在 VPC 路由表内设置了办公室和家庭网络的内网地址块,下一跳设置为网关 ECS 。
- 在另一台 ECS 内可以 ping 办公室的设备。
- 办公室的设备不可以 ping ECS 的服务器。
- 无法在 ECS 和 办公室设备内建立任何 TCP 连接。
- 网关 ECS 的 iptables,FORWARD 表默认 ACCEPT,除了 Docker 也没有其他条目了。
两件比较离奇的事情:
- 我在网关服务器上的 Docker 里开了一个子网,里面的 curl 可以访问另外一台 ECS 。
- 在今天之前,办公室其实是可以和另一台 ECS 通信的。但是,上一次 setup 也曾经短暂出现过类似的现象,只不过在 VPC 路由表里添加了办公室路由条目后,过了几分钟自己就解决了。
- 在出问题之前,我今天刚刚第一次购买了 RDS 实例一份,不知道有没有关系。
完全不懂 Li国外服务器nux 的小白一枚,想问问有没有什么办法可以排查故障?
在办公室的路由器上 tracepath,能连接到网关服务器,拿到的是 VPN 里的地址,然后就统一 no reply 了。
这种网络架构建议考虑 nat 或者在其他 ecs 启用 wireguard
是有在考虑 NAT 了,不过还是想先排查一波问题。只有网关服务器有公网访问(最外面放了阿里云的 NAT 网关),所以每个 ECS 塞一个 WireGuard 感觉不太现实……
按照这样的需求,NAT to NAT 才是正解。
https://anyisalin.github.io/2018/11/21/fast-flexible-nat-to-nat-vpn-wireguard/
排查方向:
1 、首先需要对两端的网络环境检查下,是否有网段冲突,如果两段的网络有重叠,这个肯定是不行的。
2 、第一个情况排除后,需要检查 两端 充当网关设备配置的路由是否 ok 。
3 、两端的路由正常的话,一般就没有什么大问题的,就需要具体问题具体看了。
两台同 VPC 的 ECS,一台创建了 Docker,容器内可以访问另外一台主机,这个是因为 ECS 之间路由、ECS 与容器的路由都是有的,肯定就可以通信。
谢谢。
1. 网段全部都是我自己分配的,没有任何问题,阿里云是 172.X,公司是 10.X 。
2. 公司端路由目测是没有问题,因为家里部署了一摸一样的系统,通过阿里云中转,家里和公司互相通信成功。阿里云里的网关本身的程序也可以访问公司内部。目前阿里云网关跑了一个 GitLab,在公司有一个 GitLab Runner,正常使用。以及两边都用 cURL 跑过,可以访问。
3. 所以就难受了……
关于 Docker,其实我是因为比较确信路由都是对的,所以才试了一下,但也不能说明什么。
我犯了一个错,我没有在 VPC 的路由表里添加 WireGuard 客户端的网段。我画一次我的网络拓扑图吧