问题描述:
两件比较离奇的事情:
完全不懂 Linux 的小白一枚,想问问有没有什么办法可以排查故障?
1
minsheng OP 在办公室的路由器上 tracepath,能连接到网关服务器,拿到的是 VPN 里的地址,然后就统一 no reply 了。
|
2
Qetesh 2021-02-24 12:51:24 +08:00 via iPhone
这种网络架构建议考虑 nat 或者在其他 ecs 启用 wireguard
|
3
minsheng OP @Qetesh 是有在考虑 NAT 了,不过还是想先排查一波问题。只有网关服务器有公网访问(最外面放了阿里云的 NAT 网关),所以每个 ECS 塞一个 WireGuard 感觉不太现实……
|
4
saytesnake 2021-02-24 13:14:26 +08:00
按照这样的需求,NAT to NAT 才是正解。
https://anyisalin.github.io/2018/11/21/fast-flexible-nat-to-nat-vpn-wireguard/ |
5
AIFNI45Mdxn 2021-02-24 13:32:57 +08:00
排查方向:
1 、首先需要对两端的网络环境检查下,是否有网段冲突,如果两段的网络有重叠,这个肯定是不行的。 2 、第一个情况排除后,需要检查 两端 充当网关设备配置的路由是否 ok 。 3 、两端的路由正常的话,一般就没有什么大问题的,就需要具体问题具体看了。 两台同 VPC 的 ECS,一台创建了 Docker,容器内可以访问另外一台主机,这个是因为 ECS 之间路由、ECS 与容器的路由都是有的,肯定就可以通信。 |
6
minsheng OP @AIFNI45Mdxn
谢谢。 1. 网段全部都是我自己分配的,没有任何问题,阿里云是 172.X,公司是 10.X 。 2. 公司端路由目测是没有问题,因为家里部署了一摸一样的系统,通过阿里云中转,家里和公司互相通信成功。阿里云里的网关本身的程序也可以访问公司内部。目前阿里云网关跑了一个 GitLab,在公司有一个 GitLab Runner,正常使用。以及两边都用 cURL 跑过,可以访问。 3. 所以就难受了…… 关于 Docker,其实我是因为比较确信路由都是对的,所以才试了一下,但也不能说明什么。 |
7
minsheng OP 我犯了一个错,我没有在 VPC 的路由表里添加 WireGuard 客户端的网段。我画一次我的网络拓扑图吧😂:
[阿里云内部设备] <--> [阿里云的 WireGuard 网关] <--WireGuard--> [公司路由器] <--> [公司设备] 我添加了 WireGuard 的网段之后,公司路由器和设备可以全部访问阿里云 VPC 内部设备了,阿里云网关依旧可以随意访问公司内部,但是阿里云内部设备依然不行。 |
8
minsheng OP 现在阿里云内部设备可以访问公司的路由器了,算是进步
|
9
huangmingyou 2021-02-24 14:51:55 +08:00
一层一层的 tcpdump 抓包
|
10
podel 2021-02-24 15:12:25 +08:00
阿里云 VPC 设置静态路由表。 本地内网网段指向 VPN 网关。
|
11
podel 2021-02-24 15:15:05 +08:00
我给我们公司就是这么配置的
阿里云 VPC <-> VPN 网关(ECS,使用 OpenVPN Server) <-> 本地服务器(OpenWrt 系统,使用 OpenVPN Client) 其中阿里云 VPC 需要设置 静态路由。 本地局域网设置静态路由。 |
12
podel 2021-02-24 15:19:02 +08:00
对了 另外 使用的是 OpenVPN 的 TAP 设备做二层转发。 之前 TUN 设备路由上死活弄不过去。
ECS 上面也要设置好 指向本地内网 静态路由。 |
13
zyzll1234 2021-02-24 15:39:16 +08:00
因为公司防火墙上只能用 symetiric NAT 吧
|
14
minsheng OP @podel 我之前就是这么干的。我刚刚才发现一个问题,就是公司路由器不知道为什么自动的做了一次 NAT,我明明没有配置 NAT 。总之我的问题在把 VPN 网段(不是内网网段)加进 VPC 路由后得到了解决。但是不知道为什么阿里云非 VPN 服务器依然无法连接公司内网设备,虽然可以 ping 通。还要再试试。
|
15
minsheng OP Okay,公司内部的 NAT 我破案了,我是直接用 systemd-networkd 配置的,VPN + 路由,然后在对应的 LAN 网络上我直接开启了 IPMasquerade = true,也就是 SNAT 模式了。
@podel 你说的 TAP 、TUN 、二层转发我还看不太懂,我自己再摸索摸索。 |
16
minsheng OP @saytesnake 谢谢老哥,最终懒得折腾了,还是走你的双 NAT 道路……😂
|
17
minsheng OP 所以,大致破案了,总结一下。我的网络架构是:
* 阿里云 VPC,公司内网路由到网关服务器 A ; * 网关服务器 A 通过 WireGuard 连接到公司 /家庭路由器; * 公司 /家庭路由器,对 LAN 的全部设备做了一层 NAT,NAT 背后是公司 /家庭的设备。这是通过 systemd-networkd 设置的,并没有根据目标地址 /设备选择性关闭。 我犯了两个错误: * 我没有把 WireGuard 的网段添加到 VPC 的路由表里,导致从公司内部发出的被 NAT 的包(用的是 WireGuard 的 IP ),找不到回传的地址,所以无法建立从公司到 VPC 的连接。 * 我没有对来自 VPC 的非网关服务器的包做 NAT 。我不知道为什么这会导致问题,但是反正它就是不能 work😂……一直以来我都是可以从网关服务器直接访问内网的。我猜跟 WireGuard 实现有关,导致从隧道另一头过来的包不需要过 iptables,于是访问一切正常。 |