阿里云服务器与办公室内网无法通信,目测防火墙问题,该如何排查故障

2021-02-24 12:22:50 +08:00
 minsheng

问题描述:

两件比较离奇的事情:

完全不懂 Linux 的小白一枚,想问问有没有什么办法可以排查故障?

4489 次点击
所在节点    Linux
17 条回复
minsheng
2021-02-24 12:23:52 +08:00
在办公室的路由器上 tracepath,能连接到网关服务器,拿到的是 VPN 里的地址,然后就统一 no reply 了。
Qetesh
2021-02-24 12:51:24 +08:00
这种网络架构建议考虑 nat 或者在其他 ecs 启用 wireguard
minsheng
2021-02-24 12:56:12 +08:00
@Qetesh 是有在考虑 NAT 了,不过还是想先排查一波问题。只有网关服务器有公网访问(最外面放了阿里云的 NAT 网关),所以每个 ECS 塞一个 WireGuard 感觉不太现实……
saytesnake
2021-02-24 13:14:26 +08:00
AIFNI45Mdxn
2021-02-24 13:32:57 +08:00
排查方向:
1 、首先需要对两端的网络环境检查下,是否有网段冲突,如果两段的网络有重叠,这个肯定是不行的。
2 、第一个情况排除后,需要检查 两端 充当网关设备配置的路由是否 ok 。
3 、两端的路由正常的话,一般就没有什么大问题的,就需要具体问题具体看了。

两台同 VPC 的 ECS,一台创建了 Docker,容器内可以访问另外一台主机,这个是因为 ECS 之间路由、ECS 与容器的路由都是有的,肯定就可以通信。
minsheng
2021-02-24 13:52:14 +08:00
@AIFNI45Mdxn
谢谢。
1. 网段全部都是我自己分配的,没有任何问题,阿里云是 172.X,公司是 10.X 。
2. 公司端路由目测是没有问题,因为家里部署了一摸一样的系统,通过阿里云中转,家里和公司互相通信成功。阿里云里的网关本身的程序也可以访问公司内部。目前阿里云网关跑了一个 GitLab,在公司有一个 GitLab Runner,正常使用。以及两边都用 cURL 跑过,可以访问。
3. 所以就难受了……

关于 Docker,其实我是因为比较确信路由都是对的,所以才试了一下,但也不能说明什么。
minsheng
2021-02-24 14:04:48 +08:00
我犯了一个错,我没有在 VPC 的路由表里添加 WireGuard 客户端的网段。我画一次我的网络拓扑图吧😂:

[阿里云内部设备] <--> [阿里云的 WireGuard 网关] <--WireGuard--> [公司路由器] <--> [公司设备]

我添加了 WireGuard 的网段之后,公司路由器和设备可以全部访问阿里云 VPC 内部设备了,阿里云网关依旧可以随意访问公司内部,但是阿里云内部设备依然不行。
minsheng
2021-02-24 14:05:51 +08:00
现在阿里云内部设备可以访问公司的路由器了,算是进步
huangmingyou
2021-02-24 14:51:55 +08:00
一层一层的 tcpdump 抓包
podel
2021-02-24 15:12:25 +08:00
阿里云 VPC 设置静态路由表。 本地内网网段指向 VPN 网关。
podel
2021-02-24 15:15:05 +08:00
我给我们公司就是这么配置的
阿里云 VPC <-> VPN 网关(ECS,使用 OpenVPN Server) <-> 本地服务器(OpenWrt 系统,使用 OpenVPN Client)

其中阿里云 VPC 需要设置 静态路由。 本地局域网设置静态路由。
podel
2021-02-24 15:19:02 +08:00
对了 另外 使用的是 OpenVPN 的 TAP 设备做二层转发。 之前 TUN 设备路由上死活弄不过去。
ECS 上面也要设置好 指向本地内网 静态路由。
zyzll1234
2021-02-24 15:39:16 +08:00
因为公司防火墙上只能用 symetiric NAT 吧
minsheng
2021-02-24 17:20:08 +08:00
@podel 我之前就是这么干的。我刚刚才发现一个问题,就是公司路由器不知道为什么自动的做了一次 NAT,我明明没有配置 NAT 。总之我的问题在把 VPN 网段(不是内网网段)加进 VPC 路由后得到了解决。但是不知道为什么阿里云非 VPN 服务器依然无法连接公司内网设备,虽然可以 ping 通。还要再试试。
minsheng
2021-02-24 17:26:02 +08:00
Okay,公司内部的 NAT 我破案了,我是直接用 systemd-networkd 配置的,VPN + 路由,然后在对应的 LAN 网络上我直接开启了 IPMasquerade = true,也就是 SNAT 模式了。


@podel 你说的 TAP 、TUN 、二层转发我还看不太懂,我自己再摸索摸索。
minsheng
2021-02-24 17:47:08 +08:00
@saytesnake 谢谢老哥,最终懒得折腾了,还是走你的双 NAT 道路……😂
minsheng
2021-02-24 18:07:13 +08:00
所以,大致破案了,总结一下。我的网络架构是:

* 阿里云 VPC,公司内网路由到网关服务器 A ;
* 网关服务器 A 通过 WireGuard 连接到公司 /家庭路由器;
* 公司 /家庭路由器,对 LAN 的全部设备做了一层 NAT,NAT 背后是公司 /家庭的设备。这是通过 systemd-networkd 设置的,并没有根据目标地址 /设备选择性关闭。

我犯了两个错误:

* 我没有把 WireGuard 的网段添加到 VPC 的路由表里,导致从公司内部发出的被 NAT 的包(用的是 WireGuard 的 IP ),找不到回传的地址,所以无法建立从公司到 VPC 的连接。
* 我没有对来自 VPC 的非网关服务器的包做 NAT 。我不知道为什么这会导致问题,但是反正它就是不能 work😂……一直以来我都是可以从网关服务器直接访问内网的。我猜跟 WireGuard 实现有关,导致从隧道另一头过来的包不需要过 iptables,于是访问一切正常。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755778

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX