zoukankan      html  css  js  c++  java
  • Wireguard笔记(三) lan-to-lan子网穿透和多网段并存

    目录

    Wireguard笔记(一) 节点安装配置和参数说明
    Wireguard笔记(二) 命令行操作
    Wireguard笔记(三) lan-to-lan子网穿透和多网段并存

    多 Wireguard 服务并存

    可以在/etc/wireguard/下创建多个配置文件, 例如wg0.conf, wg1.conf配置多个服务

    • 分别使用systemctl enable/start wg-quick@wg0, systemctl enable/start wg-quick@wg1 启动
    • 使用wg show能同时看到这些wiguard服务的连接情况
    • 各配置使用不同的隧道网段, 会体现到route上
    • 各配置当中, peer中的allowedIP会影响route规则, 如果相同会产生冲突

    对于非服务端, 配置文件的例子为

    [root@vm_ci01 ~]# more /etc/wireguard/wg0.conf 
    [Interface]
    PrivateKey = [填入私钥]
    Address = 10.253.0.3/32
    ListenPort = 50004
    PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -A FORWARD -o %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -D FORWARD -o %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    
    [Peer]
    PublicKey = [填入服务端的公钥]
    AllowedIPs = 10.253.0.0/24,192.168.116.0/24
    Endpoint = 1.123.45.67:50004(服务端的IP端口)
    PersistentKeepalive = 25
    

    用 Wireguard 实现 lan-to-lan

    需求: 用阿里云的弹性公网IP创建一个wireguard节点, 让公司内网lan接入, 接入后阿里云VPC中的机器可以与公司lan中的机器互相通信.

    阿里云服务器的配置

    1. 首先创建一个安全组, wireguard peer所在机器单独放到这个安全组
    2. 给这个机器升级内核到5.6.x以上, 开启wireguard, 安装对应的工具wg-quick等
    3. 启动服务, 从异地lan的节点建立连接, 让节点间互通

    配置示例

    [g01 ~]# more /etc/wireguard/wg0.conf 
    [Interface]
    PrivateKey = +123123Hw=
    Address = 10.252.0.1/24
    ListenPort = 50004
    PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -A FORWARD -o %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -D FORWARD -o %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    
    # Server1: office - gw
    [Peer]
    PublicKey = +123123Hw=
    AllowedIPs = 10.252.0.2/32,192.168.15.0/24 (两部分, 一个是对方peer的隧道IP, 另一个是对方的内网IP段)
    

    而后, 需要在阿里云中配置

    • VPC的路由表
      • 自定义部分, 增加目标网段(异地lan)的跳转, 下一跳指向刚才创建的wireguard节点.
    • wireguard节点所在的安全组
      • 出方向默认是全放行, 不需要改
      • 入方向分三部分, 一部分是授权所有来源, 仅开放提供服务的端口, 例如80, 443, 50004等, 这里要把wireguard的端口打开
      • 入方向的第二部分是默认的允许所有来源, 所有端口, 协议类型ICMP, 这部分是允许ping
      • 入方向的第三部分是为了lan to lan设置的: 允许来源阿里云内网的IP段, 端口所有, 协议全部. 这一条不加, 就只能ping, 不能连.

    公司内网服务器的配置

    1. 创建新虚机
    2. 升级内核至5.6+, 开启wireguard, 安装wg-quick
    3. 创建配置文件, 与阿里云的wireguard节点互通

    配置示例

    [c01 ~]# more /etc/wireguard/wg1.conf 
    [Interface]
    PrivateKey = +123123Hw=
    Address = 10.252.0.2/32
    ListenPort = 50003
    PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -A FORWARD -o %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -D FORWARD -o %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    
    # Aliyun gw
    [Peer]
    PublicKey = +123123Hw=
    AllowedIPs = 10.252.0.0/24,192.168.123.0/20 (两部分, 一个是对方peer的IP, 因为对方是个接入点, 所以配了整个IP段; 另一个是对方的内网IP段)
    Endpoint = 123.45.67.89:50004 (公网IP)
    PersistentKeepalive = 25 (主动保持连接)
    

    而后, 需要在本地路由器上配置

    • 路由表: 将192.168.123.0/20这个网段的下一跳指向上面配置好的机器

    问题排查

    如果连接有问题, 按以下步骤排查

    1. 隧道是否通: 两个节点用隧道IP互相ping是否有响应, 这步必须是通的, 否则后面都不需要试了肯定不行
    2. 隧道节点ping对方子网
    3. 子网ping对方子网

    如果有问题, 用traceroute, tracepath, tracert这些命令看看包到哪里停住的, 如果最后一个包已经到了远端的隧道节点, 说明本端配置是对的, 需要检查隧道中间的节点或者对方节点.

    lan-to-lan 的配置要点

    配置部分需要注意: 两个peer在配置上都需要给对方的allowedIPs加上对方的子网IP段, 这个很重要

    • wireguard节点往本子网IP段的访问, 使用的都是子网IP段, 不需要额外路由
    • wireguard节点收到返回的包后, 需要将包发回原请求方时, 看的是allowedIPs, 如果原请求方是隧道节点, 则此隧道IP必须指向正确的返回路径下一跳节点, 如果原请求方是隧道外的机器, 那么不仅它的入口隧道IP路径需要正确, 原请求方的子网IP也必须指向正确的下一跳节点.

    不同配置下的访问情况

    • 前提条件
      • A和B都已经在sysctl中开启了ip forward, 在wireguard配置PostUp中开启了转发
    • A,B都不给对方的allowedIPs加子网IP段
      • 只有A和B之间能通过隧道IP通信, A不能访问B后面的子网, 反之亦然, 因为A和B只会转发隧道IP段的包, 往子网IP段的包不会发入隧道
      • A子网的机器不能访问B子网的机器, 反之亦然.
    • A给B的allowedIPs配了子网IP段, 但是B没给A配
      • A能访问B后面的子网
      • 任何连入隧道的节点, 如果将B的子网IP段配置到A上, 也能通过A访问B的子网
      • A的子网其他机器, 通过A不能访问B后面的子网, 用tracert可以看到, 有过去的包但是没有返回的包
      • B不能访问A后面的子网
    • A和B都给对方的AllowedIPs配置了对方的子网IP段
      • A和B都能访问对方后面的子网
      • A的子网其他机器, 通过A可以访问B的子网机器, 反之亦然

    综上:

    • 开启了转发的wireguard节点, 假设为A, 相当于对隧道中的所有节点开放了自己的子网
    • 隧道中的节点B仅需要给A节点allowedIPs配置上A的子网IP段, 就能访问A的子网
    • 如果节点B也开启了转发, 那么给A节点allowedIPs配置上A的子网IP段后, A的子网机器也能访问B节点的子网
  • 相关阅读:
    Remove Linked List Elements
    Count Primes
    Isomorphic Strings
    Read N Characters Given Read4 II
    Word Ladder II Graph
    Word Ladder
    Binary Tree Right Side View
    House Robber
    Find non-overlap jobs with max cost
    Find Peak Element
  • 原文地址:https://www.cnblogs.com/milton/p/15339908.html
Copyright © 2011-2022 走看看