当前位置:首页 » 网络杂谈 » 正文

Linux与网络设备 GRE配置经验总结

1763 人参与  2021年12月15日 10:52  分类 : 网络杂谈  评论
GRE 介绍及应用场景

GRE(General Routing Encapsulation),即通用路由封装,是一种三层 VPN 技术。它的最大作用是可以对某些网络层协议的报文进行封装,如对路由协议、语音、视频等组播报文或IPv报文进行封装。同时,也能够与 IPSec 结合,解决 GRE 的安全问题。

本文主要介绍 Linux 与 网络设备(华为防火墙、华为路由器、Juniper SRX防火墙)对接 GRE 的配置方法

GRE 报文

如下图所示,GRE 是按照 TCPIP 协议栈进行逐层封装,新的 IP 头会封装在原有的 IP 头中,然后运送出去,封装操作是通过 Tunnel 接口完成的,GRE 协议经过 Tunnel 口时,会将接口的封装协议设置为 GRE 协议。

GRE 的配置场景CentOS . 与 华为防火墙建立 GRE 隧道拓扑图

实现目标
  • CentOS 与 华为防火墙建立 GRE 隧道;

  • 华为防火墙背后的内网网段 .../ 通过 GRE 隧道从 CentOS 到 Internet;

  • CentOS 配置端口映射,将 ... 端口映射到 CentOS 的公网地址 ... 端口。

配置
  • CentOS

  • 配置接口与路由

    [root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-tun
    DEVICE=tun
    BOOTPROTO=none
    ONBOOT=yes
    DEVICETYPE=tunnel
    TYPE=GRE
    PEER_INNER_IPADDR=...
    PEER_OUTER_IPADDR=...
    MY_INNER_IPADDR=...
    MY_OUTER_IPADDR=...

    [root@CentOS ~]# vim /etc/sysconfig/network-scripts/route-tun
    .../ via ...

    [root@CentOS ~]# ifup tun

    Iptables 配置

    # 安装 iptables 管理服务
    [root@CentOS ~]# yum install iptables-services

    # 在 INPUT 方向要放行对端的公网地址
    [root@CentOS ~]# iptables -I INPUT -s .../ -j ACCEPT

    # 配置源地址转换
    [root@CentOS ~]# iptables -t nat -A POSTROUTING -s .../ -j SNAT --to-source ...

    # 端口映射
    [root@CentOS ~]# iptables -t nat -A PREROUTING -d ... -p tcp --dport -j DNAT --to-dest ...:

    # 保存 iptables
    [root@CentOS ~]# service iptables save

    开启 ipv 转发

    [root@CentOS ~]# echo "net.ipv.ip_forward = " >> /etc/sysctl.conf

    [root@CentOS ~]# sysctl -p

  • 华为防火墙

    本次以华为 USGE 系列防火墙为例:

  • 配置接口,并添加到安全区域

    interface Tunnel
    ip address ... ...
    tunnel-protocol gre
    source ...
    destination ...

    # 将接口添加到安全区域内
    [USGE] firewall zone tunnel
    firewall zone name tunnel
    set priority
    add interface Tunnel

    配置安全策略

    在实际的实施中,可以将策略收紧一些,根据需求限制源和目的地址。

    如果条件允许的话,可以先将默认安全策略设置为 permit,待调通之后,再修改安全策略:

    security-policy
    rule name tunnel_out
    source-zone trust
    destination-zone tunnel
    action permit
     
    rule name tunnel_in
    source-zone tunnel
    destination-zone trust
    action permit

    # 放行 tunnel 到 untrust 的流量
    rule name tunnel_untrust
    source-zone tunnel
    destination-zone untrust
    action permit

    配置策略路由

    [USGE]policy-based-route
    #
    policy-based-route
    rule name PBR
    source-zone trust
    source-address ... mask ...
    action pbr egress-interface Tunnel

    配置 No-NAT

    设置去往隧道的流量不使用源地址转换:

    [USGE-policy-nat]dis th
    nat-policy
    rule name SNAT
    source-zone tunnel
    destination-zone untrust
    source-address ... mask ...
    action no-nat

验证

主要有如下几个测试方法:

  1. 在 CentOS 或 防火墙 ping 对端的隧道地址;

  2. 使用 .../ 网段内的设备 traceroute 公网地址,查看经过的路径以确认是否经过隧道转发。

Ubuntu 与 华为路由器建立 GRE 隧道
拓扑图

实现目标
  • Ubuntu 与华为路由器建立 GRE 隧道;

  • 华为防火墙背后的内网网段 .../ 通过 GRE 隧道从 CentOS 到 Internet;

  • Ubuntu 配置端口映射,将 ... 端口映射到 CentOS 的公网地址 ... 端口。

配置
  • Ubuntu

  • netplan 配置

    root@ubuntdemo:~# vim /etc/netplan/-installer-config.yaml
    network:
      ethernets:
        ens:
          addresses:
            - .../
          gateway: ...
          nameservers:
            addresses:
                - ...
      tunnels:
          tun:
            mode: gre
            local: ...
            remote: ...
            addresses: [ .../ ]
            routes:
            - to: .../
              via: ...

    # 可以先执行 netplan try 验证一下,如果没有断掉的话可以按 ENTER 确认配置
    # 如果和主机 SSH 中断,可以等待 S 会自动恢复
    root@ubuntdemo:~# netplay try

    iptables 设置

    Ufw 是 Ubuntu 的防火墙配置工具,底层还是调用 iptables 处理的:

    # 启用 ufw
    ufw enable

    # 放行 SSH
    ufw allow ssh

    # 放行 GRE 对端进入的流量
    ufw allow from .../

    # 配置 nat 映射
    iptables -t nat -A POSTROUTING -s .../ -j SNAT --to-source ...
    iptables -t nat -A PREROUTING -d ... -p tcp --dport -j DNAT --to-dest ...:

    # 将 ufw 设置为开机自启动
    systemctl enable ufw

    开启 ipv 转发:

    echo "net.ipv.ip_forward = " >> /etc/sysctl.conf

    sysctl -p


    华为路由器

    以 AR 系列路由器为例:

    • 配置接口

      interface Tunnel//
      ip address ... ...
      tunnel-protocol gre
      source ...
      destination ...

    • 配置策略路由

      # 配置 ACL
      [AR] acl number
      [AR-acl-adv-] rule permit ip destination ... ...

      # 配置流分类
      [AR] traffic classifier togretunnel
      [AR-classifier-togretunnel] if-match acl

      # 配置流行为
      [AR] traffic behavior togretunnel
      [AR-behavior-togretunnel] redirect ip-nexthop ...

      # 配置流策略
      [AR] traffic policy togretunnel
      [AR-trafficpolicy-vlan] classifier togretunnel behavior togretunnel

      # 在内网口调用流策略
      [AR] interface gigabitethernet //
      [AR-GigabitEthernet//] traffic-policy togretunnel inbound

验证

验证方法同 CentOS 与 华为防火墙建立 GRE 隧道一致。

Juniper SRX 防火墙的 GRE 配置

SRX 防火墙的出接口如果使用了 route-instances,那么配置 tunnel 口时,一定要注意增加 route-instance destination,如下所示:

set interfaces gr-// unit tunnel source ...
set interfaces gr-// unit tunnel destination ...
set interfaces gr-// unit tunnel routing-instance destination EXAMPLE-INSTANCE
set interfaces gr-// unit family inet address .../

另外策略路由在 SRX 中称为 FBF,还有 No-NAT的配置示例如下:

# 配置 firewall filter,匹配需要进入隧道的流量
set firewall filter to-GreTunnel term from source-address .../
set firewall filter to-GreTunnel term then routing-instance EXAMPLE-INSTANCE
set firewall filter to-GreTunnel term then accept

set routing-options rib-groups global import-rib EXAMPLE-INSTANCE.inet.

# 配置去往 Gre Tunnel 的路由
set routing-instances EXAMPLE-INSTANCE instance-type forwarding
set routing-instances EXAMPLE-INSTANCE routing-options interface-routes rib-group inet global
set routing-instances EXAMPLE-INSTANCE routing-options static route .../ next-hop ...

# 在内网口调用 firewall filter
set interfaces reth unit family inet filter input to-GreTunnel

# 去往隧道口的流量不做 SNAT
set security nat source rule-set Gre-snat from zone Trust
set security nat source rule-set Gre-snat to zone EXAMPLE-INSTANCE
set security nat source rule-set Gre-snat rule to-cn-no-nat match source-address .../
set security nat source rule-set Gre-snat rule to-cn-no-nat match destination-address .../
set security nat source rule-set Gre-snat rule to-cn-no-nat then source-nat off

CentOS 的策略路由

如果有使用 Linux 作为中转的场景,也就是说华为防火墙和 Linux 建立 GRE 隧道,Linux 又和其他设备建立,由 Linux 做中转流量,这种场景下,可以在 Linux 配置策略路由,如下所示:

# 临时配置,重启后会消失,可以作为调试使用
ip rule add from .../ table pref
ip route add .../ via ... table

# 将配置持久化
vim /etc/sysconfig/network-scripts/rule-eth
from .../ table pref

vim /etc/sysconfig/network-scripts/route-eth
default via ... dev tun

# 验证命令
ip rule show
ip route show table

总结

GRE虽然配置还比较简单, 在实际项目中会经常用到。 Linux 通常需要系统工程师配置,而网络设备通常由网络工程师配置,如果对接有问题,则需要沟通协调,就比较浪费时间。如果一个工程师能够完成两种设备的配置,并进行排错,那么效率将会提高很多。


了解新钛云服

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

往期技术干货

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 个版本来了,附项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建

本文链接:https://www.woshiqian.com/post/52964.html

百度分享获取地址:https://share.baidu.com/code
网络设备  

我是钱微信/QQ:5087088

广告位、广告合作QQ:5087088

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

       

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。