linux网络设备的作用,Linux与网络设备 GRE配置经验总结

d06490241d40246316fab4f1d5f0c2ce.png

本文转载自微信公众号「新钛云服」,作者侯明明。转载本文请联系新钛云服公众号。

GRE 介绍及应用场景

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

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

GRE 报文

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

c13ceae14df74b03cfb8a14d531a0e4a.png

GRE 的配置场景

CentOS 7.6 与 华为防火墙建立 GRE 隧道

拓扑图

9b42df68ec06547445293b1a812ac134.png

实现目标

CentOS 与 华为防火墙建立 GRE 隧道;

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

CentOS 配置端口映射,将 192.168.1.10 的 8080 端口映射到 CentOS 的公网地址 200.1.1.1 的 8080 端口。

配置

CentOS

配置接口与路由

[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-tun0

DEVICE=tun0

BOOTPROTO=none

ONBOOT=yes

DEVICETYPE=tunnel

TYPE=GRE

PEER_INNER_IPADDR=172.16.1.2

PEER_OUTER_IPADDR=100.1.1.1

MY_INNER_IPADDR=172.16.1.1

MY_OUTER_IPADDR=200.1.1.1

[root@CentOS ~]# vim /etc/sysconfig/network-scripts/route-tun0

192.168.1.0/24 via 172.16.1.2

[root@CentOS ~]# ifup tun0

Iptables 配置

# 安装 iptables 管理服务

[root@CentOS ~]# yum install iptables-services

# 在 INPUT 方向要放行对端的公网地址

[root@CentOS ~]# iptables -I INPUT -s 100.1.1.1/32 -j ACCEPT

# 配置源地址转换

[root@CentOS ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 200.1.1.1

# 端口映射

[root@CentOS ~]# iptables -t nat -A PREROUTING -d 200.1.1.1 -p tcp --dport 8080 -j DNAT --to-dest 192.168.1.10:8080

# 保存 iptables

[root@CentOS ~]# service iptables save

开启 ipv4 转发

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

[root@CentOS ~]# sysctl -p

华为防火墙

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

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

interface Tunnel0

ip address 172.16.1.2 255.255.255.0

tunnel-protocol gre

source 100.1.1.1

destination 200.1.1.1

# 将接口添加到安全区域内

[USG6300E] firewall zone tunnel

firewall zone nametunnel

setpriority 75

addinterface Tunnel0

配置安全策略

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

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

security-policy

rulenametunnel_out

source-zone trust

destination-zone tunnel

actionpermit

rulenametunnel_in

source-zone tunnel

destination-zone trust

actionpermit

# 放行 tunnel 到 untrust 的流量

rulenametunnel_untrust

source-zone tunnel

destination-zone untrust

actionpermit

配置策略路由

[USG6300E]policy-based-route

#

policy-based-route

rulenamePBR

source-zone trust

source-address 192.168.1.0 mask 255.255.255.0

actionpbr egress-interface Tunnel0

配置 No-NAT

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

[USG6300E-policy-nat]dis th

nat-policy

rulenameSNAT

source-zone tunnel

destination-zone untrust

source-address 192.168.1.0 mask 255.255.255.0

actionno-nat

验证

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

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

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

Ubuntu 18 与 华为路由器建立 GRE 隧道

拓扑图

43f684d16d610c9ab81e4d635e0a79c7.png

实现目标

Ubuntu 18 与华为路由器建立 GRE 隧道;

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

Ubuntu 配置端口映射,将 192.168.1.10 的 8080 端口映射到 CentOS 的公网地址 200.1.1.1 的 8080 端口。

配置

Ubuntu

netplan 配置

root@ubunt18demo:~# vim /etc/netplan/00-installer-config.yaml

network:

ethernets:

ens3:

addresses:

- 200.1.1.1/24

gateway4: 200.1.1.254

nameservers:

addresses:

- 114.114.114.114

tunnels:

tun0:

mode: gre

local: 200.1.1.1

remote: 100.1.1.1

addresses: [ 172.16.1.1/24 ]

routes:

- to: 192.168.1.0/24

via: 172.16.1.2

# 可以先执行 netplan try 验证一下,如果没有断掉的话可以按 ENTER 确认配置

# 如果和主机 SSH 中断,可以等待 120S 会自动恢复

root@ubunt18demo:~# netplay try

iptables 设置

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

# 启用 ufw

ufw enable

# 放行 SSH

ufw allow ssh

# 放行 GRE 对端进入的流量

ufw allow from100.1.1.1/32

# 配置 nat 映射

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 200.1.1.1

iptables -t nat -A PREROUTING -d 200.1.1.1 -p tcp --dport 8080 -j DNAT --to-dest 192.168.1.10:8080

# 将 ufw 设置为开机自启动

systemctl enable ufw

开启 ipv4 转发:

echo"net.ipv4.ip_forward = 1">> /etc/sysctl.conf

sysctl -p

华为路由器

以 AR1200 系列路由器为例:

配置接口

interface Tunnel0/0/1

ip address 172.16.1.2 255.255.255.0

tunnel-protocol gre

source 100.1.1.1

destination 200.1.1.1

配置策略路由

# 配置 ACL

[AR1200] acl number 3000

[AR1200-acl-adv-3000] rule10 permit ip destination 192.168.1.0 0.0.0.255

# 配置流分类

[AR1200] traffic classifier togretunnel

[AR1200-classifier-togretunnel] if-match acl 3000

# 配置流行为

[AR1200] traffic behavior togretunnel

[AR1200-behavior-togretunnel] redirect ip-nexthop 172.16.1.1

# 配置流策略

[AR1200] traffic policy togretunnel

[AR1200-trafficpolicy-vlan10] classifier togretunnel behavior togretunnel

# 在内网口调用流策略

[AR1200] interface gigabitethernet 1/0/1

[AR1200-GigabitEthernet3/0/0] traffic-policy togretunnel inbound

验证

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

Juniper SRX 防火墙的 GRE 配置

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

setinterfaces gr-0/0/0 unit 0 tunnel source 100.1.1.1

setinterfaces gr-0/0/0 unit 0 tunnel destination 200.1.1.1

setinterfaces gr-0/0/0 unit 0 tunnel routing-instance destination EXAMPLE-INSTANCE

setinterfaces gr-0/0/0 unit 0 family inet address 172.16.1.2/24

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

# 配置 firewall filter,匹配需要进入隧道的流量

setfirewall filterto-GreTunnel term 1fromsource-address 192.168.1.0/24

setfirewall filterto-GreTunnel term 1thenrouting-instance EXAMPLE-INSTANCE

setfirewall filterto-GreTunnel term 3thenaccept

setrouting-options rib-groupsglobalimport-rib EXAMPLE-INSTANCE.inet.0

# 配置去往 Gre Tunnel 的路由

setrouting-instances EXAMPLE-INSTANCE instance-type forwarding

setrouting-instances EXAMPLE-INSTANCE routing-options interface-routes rib-groupinetglobal

setrouting-instances EXAMPLE-INSTANCE routing-optionsstaticroute 0.0.0.0/0next-hop 172.16.1.1

# 在内网口调用 firewall filter

setinterfaces reth2 unit 0 family inet filter inputto-GreTunnel

# 去往隧道口的流量不做 SNAT

setsecurity nat sourcerule-setGre-snatfromzone Trust

setsecurity nat sourcerule-setGre-snattozone EXAMPLE-INSTANCE

setsecurity nat sourcerule-setGre-snatruleto-cn2-no-nat match source-address 192.168.1.0/24

setsecurity nat sourcerule-setGre-snatruleto-cn2-no-nat match destination-address 0.0.0.0/0

setsecurity nat sourcerule-setGre-snatruleto-cn2-no-natthensource-natoff

CentOS 的策略路由

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

# 临时配置,重启后会消失,可以作为调试使用

ip ruleaddfrom192.168.1.0/24table100 pref 10

ip route add0.0.0.0/0 via 200.1.1.254table100

# 将配置持久化

vim /etc/sysconfig/network-scripts/rule-eth0

from192.168.1.0/24table100 pref 10

vim /etc/sysconfig/network-scripts/route-eth0

defaultvia 172.16.1.1 dev tun0

# 验证命令

ip ruleshow

ip route show table100

总结

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

【编辑推荐】

【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值