使用nftables转发GRE报文

在为今年硬件路由器实验配置上网隧道时, 我需要在主机R上将主机A与主机R之间的GRE隧道转发到主机R与主机B之间。一开始, 我尝试使用ip6tables (底层也是nftables)的nat表来进行DNAT和SNAT, 但是发现GRE报文似乎无法命中nat表中的规则。经过尝试, GRE报文可以命中mangle表中的规则, 但是mangle表似乎无法修改源和目标IP地址。经过进一步学习, 我注意到nftables更加灵活, 它的mangle表可以直接修改IP分组头的各项字段, 因此我也成功编制了如下脚本来实现上述目标:

#!/bin/sh

PEER1_IP=A的IP地址
PEER2_IP=B的IP地址

nft add rule ip6 mangle PREROUTING meta l4proto gre ip6 saddr "${PEER1_IP}" counter packets 0 bytes 0 ip6 daddr set "${PEER2_IP}"
nft add rule ip6 mangle PREROUTING meta l4proto gre ip6 saddr "${PEER2_IP}" counter packets 0 bytes 0 ip6 daddr set "${PEER1_IP}"
nft add rule ip6 mangle POSTROUTING meta l4proto gre oifname "接口1" counter packets 0 bytes 0 ip6 saddr set "R的接口1的IP地址"
nft add rule ip6 mangle POSTROUTING meta l4proto gre oifname "接口2" counter packets 0 bytes 0 ip6 saddr set "R的接口2的IP地址"

特此记录。

另外, 今天配网时我顺便测试发现北京联通又不验证IPv6源地址了。

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/19589QrCode