阿里云服务器与办公室内网无法通信,目测防火墙问题,该如何排查故障 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
minsheng
V2EX    Linux

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

  •  
  •   minsheng 2021-02-24 12:22:50 +08:00 5147 次点击
    这是一个创建于 1720 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题描述:

    • 阿里云上同一个 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 实例一份,不知道有没有关系。

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

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

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

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

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

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

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


    @podel 你说的 TAP 、TUN 、二层转发我还看不太懂,我自己再摸索摸索。
    minsheng
        16
    minsheng  
    OP
       2021-02-24 17:47:08 +08:00
    @saytesnake 谢谢老哥,最终懒得折腾了,还是走你的双 NAT 道路……
    minsheng
        17
    minsheng  
    OP
       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,于是访问一切正常。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     925 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 21:24 PVG 05:24 LAX 13:24 JFK 16:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86