支持nat-t的tunnel要么是标准的C/S模型,能够从墙内发起建立tunnel隧道,且有保活机制使防火墙上的ct持久生效。要么像IPSec一样,能够在协议层面支持,知道tunnel是经过nat的。
linux gre 和 vxlan 作为常用的tunnel口是无法过nat的,但其性能和复杂度比ssl,ipsec这些能够过nat的tunnel要好很多。
做了些gre/vxlan过nat的测试,做了些记录:

GRE过nat
如果网关设备为ovs,直接通过流表学习到nat过的gre头即可,如果网关设备为linux bridge需要改动内核gre模块,修改量不多。
网关设备为ovs:
网关设备上ovs上配置
* 创建br0
ovs-vsctl add-br br0
ip link set up dev br0
ip addr add 211.1.1.1/24 dev br0
* 创建gre口
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre options:local_ip=192.168.121.177 options:remote_ip=flow options:key=flow
* 创建流表,in_port=1是gre1的端口编号,流表主要用于学习反向nat过的流表。流表需要配置老化时间防止对端不可用后流表残留,这里只是测试没配置。
ovs-ofctl add-flow br0 "priority=1,in_port=1,actions=learn(priority=1,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[] load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[

本文探讨了GRE和VXLAN隧道如何在穿越NAT时保持连接。介绍了在网关设备为OVS的情况下,如何配置GRE和VXLAN以通过NAT,并强调了Nat-T的重要性。同时,提到了Linux内核中针对VXLAN的修改,以支持NAT穿越,并指出保活机制对于维持连接跟踪表的重要性。

1361

被折叠的 条评论
为什么被折叠?



