免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4076 | 回复: 7
打印 上一主题 下一主题

请教nat 的实现问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-02 11:21 |只看该作者 |倒序浏览
请问,谁有nat的源代码及相关文档?
或者,谁能讲解下如何编码来实现nat?

现在实际遇到的问题是:
公司要编写类似于nat功能的程序。我看了一些nat的技术原理,不过对nat中以哪种方式传输数据那块不太懂。
请问,nat服务器是用哪种方式收到数据包以及用哪种方式将转换后的数据包发出去?
(即是用tcp/udp套接口接收和发送数据,还是原始套接口接收和发送数据)

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
2 [报告]
发表于 2010-06-02 12:52 |只看该作者
地址转换吗?如果是,就是将出去的IP包的源地址变换为外网口地址,将进来的包,检索到对应的源IP地址,再变换回去。需要建立一个对应关系hash表。由于需要操作原始的IP包,在应用层需要使用raw socket。应用层的效率太低,一般都在内核做。

论坛徽章:
0
3 [报告]
发表于 2010-06-02 12:59 |只看该作者
netfilter?

论坛徽章:
0
4 [报告]
发表于 2010-06-02 14:04 |只看该作者
哦 原来是用raw socket来接收数据哦。
刚开始还以为nat要根据接收到的包的类型,分别发送udp包或是tcp包。

那看来很复杂。如果改变了raw socket包中的源ip,还得需要修改校验和吧?

有没有nat的源代码呢?

谢谢

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
5 [报告]
发表于 2010-06-02 14:33 |只看该作者
哦 原来是用raw socket来接收数据哦。
刚开始还以为nat要根据接收到的包的类型,分别发送udp包或是tcp包。 ...
gaowg2000 发表于 2010-06-02 14:04



很多很多,nat很简单的。freebsd上有用户层的natd,或者可以参考

论坛徽章:
0
6 [报告]
发表于 2010-06-02 15:27 |只看该作者
Linux的Nat是内核的Netfilter模块实现的,直接看内核Netfilter模块的源代码。下载地址是 http://www.kernel.org/
Linux的Nat是用iptables应用层程序配置的,iptables通过与内核模块Netfilter对话来配置Nat的各种功能。源代码下载地址是http://www.iptables.org/

给几个iptables的例子:

将10.0.0.0/16网段所有请求nat到eth1网卡所连接的网络
iptables -A POSTROUTING -s 10.0.0.0/16 -o eth1 -j MASQUERADE

将所有到Nat服务器80端口的请求DNAT到内网的192.168.0.44:80
iptables -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.44:80

如果你要实现自己的Nat功能,首先考虑直接iptables是否可以配置出来,然后考虑通过开发应用程序来设置Netfilter模块完成该功能;都不能实现的情况下再考虑修改Linux内核的Netfilter模块以达成目标。

论坛徽章:
0
7 [报告]
发表于 2010-06-02 15:31 |只看该作者
Linux的源代码是个好东西。要善于利用。
能在里面找到很多需要的内容。

论坛徽章:
0
8 [报告]
发表于 2010-06-02 15:37 |只看该作者
非常感谢

因为这个项目是修改协议栈的,在ip层之后封装了新的协议(协议头和协议体)。最终目的是支持新协议的终端与传统外网终端进行透明的传输。所以要自己写nat,来支持。

不过ls的思路,我可以参考下。
当某个服务器收到原始套接字后,我可以直接进行拆包,把新的协议头和协议体去掉,再封包之后将包发送到nat服务器上。这样就简单了。(nat服务器我可以自己架设下)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP