TCP/IP详解之NAT

一、原理
NAT的工作原理就是重写重写通过路由器的数据包的识别信息。这种情况常发生在数据传输的两个方向上。在这种最基本的形式中,NAT需要重写往一个方向传输的数据包的源IP地址,重写往另一个方向传输的数据包的目的IP地址。这允许传出的数据包的源IP地址变为NAT路由器面向Internet的网络接口地址,而不是原始主机的接口地址。因此,在互联网上的主机看来,数据包是来自于具备全局路由IP的NAT路由器,而不是位于NAT内部的私有地址的主机。
在这里插入图片描述

二、移植
我的实际项目中,是ppp和eth之间数据包的转发,具体参考了rtthread组件中的NAT源码,但是并没有具体的详细使用说明,下面记录我的详细移植过程,其实还可以参考一下esp官方的SDK,里面实现了NAPT,完整的嵌入到LWIP协议栈中。
1、rtconfig.h中添加宏定义

#define LWIP_USING_NAT

2、nat初始化
ip_nat_init()放在lwip_init()最后执行;

ip_nat_init();//void lwip_init(void)

3、添加参数配置
ip_nat_start()我是放在ppp_netdev_refresh()最后,ppp拨号成功后配置;

void ip_nat_start(void)
{
   
    ip_nat_entry_t nat_entry;
    err_t ret = 0;
    struct netif *out_if_ppp;
    struct netif *in_if_eth0;
    out_if_ppp = netif_find("pp1");//net dev是pp,1表示add net dev时的序号,如果不加1,find会失败
    in_if_eth0 = netif_find("e00");//net dev是e0,第二个0表示add net dev时的序号,如果不加0,find会失败
    nat_entry.out_if = out_if_ppp;
    nat_entry.in_if = in_if_eth0;

    IP4_ADDR(&nat_entry.source_net, 198, 120, 0, 210);//local ip
    IP4_ADDR(&nat_entry.source_netmask, 255, 255, 255, 0);
    IP4_ADDR(&nat_entry.dest_net, 123, 123, 123, 0);//dest ip
    IP4_ADDR(&nat_entry.dest_netmask, 255, 255<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值