免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 瀚海书香
打印 上一主题 下一主题

网段地址转换 —— NETSNAT NETDNAT target源码 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
11 [报告]
发表于 2011-02-27 08:25 |只看该作者
代码里的一些数值,比如 41, 37 之类的,建议用宏定义一下。
也好明白这些数值是什么意思

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
12 [报告]
发表于 2011-02-27 08:27 |只看该作者
这条规则怎么理解?


这个为什么后面  192.168.2.0/24-192.168.3.0/24 是这样的,不是就转到192.168. ...
Godbach 发表于 2011-02-27 08:15


POSTROUTING上的规则,是内网访问外网时进行的源地址伪装。
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j NETSNAT --netsnat 192.168.2.0/24-192.168.3.0/24
比如内网192.168.2.3访问外网时,源地址会相应的变成192.168.3.3;而192.168.2.88会变成192.168.3.88。


PREROUTING上的规则,是对外网对内网的访问进行重定向。
iptables -t nat -A PREROUTING -d 192.168.3.0/24 -j NETDNAT --netdnat 192.168.3.0/24-192.168.2.0/24
比如外网的机器访问192.168.3.2,相应的就会转到内网的192.168.2.2的机器。




如果只是实现内网向外网访问的伪装,那么只需要POSTROUTING上的NETSNAT的规则就可以了。

如果只是对外网对内网的访问重定向,那么只需要PREROUTING上的NETDNAT的规则就可以了。

如果内网既要访问外网,而且也允许外网访问内网。那么就需要两条规则了。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
13 [报告]
发表于 2011-02-27 08:33 |只看该作者
POSTROUTING上的规则,是内网访问外网时进行的源地址伪装。
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j NETSNAT --netsnat 192.168.2.0/24-192.168.3.0/24
比如内网192.168.2.3访问外网时,源地址会相应的变成192.168.3.3;而192.168.2.88会变成192.168.3.88。


这里有两个疑问:
(1) 按照你上面的描述,为什么规则不写成
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j NETSNAT --netsnat 192.168.3.0/24

是为了保证一一对应关系吗?
(2)你这里实现的是网段到网段的转换是吧
比如内网192.168.2.3访问外网时,源地址会相应的变成192.168.3.3

这个对应是固定的吗,能否实现将源网段转换成目标网段随机的 IP

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
14 [报告]
发表于 2011-02-27 08:35 |只看该作者
代码里的一些数值,比如 41, 37 之类的,建议用宏定义一下。
也好明白这些数值是什么意思
Godbach 发表于 2011-02-27 08:25


多谢提出意见,已改动。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
15 [报告]
发表于 2011-02-27 08:36 |只看该作者
另外一个小建议,能否把你的代码以附件的形式上传一份。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
16 [报告]
发表于 2011-02-27 08:40 |只看该作者
回复 13# Godbach
(1) 按照你上面的描述,为什么规则不写成
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j NETSNAT --netsnat 192.168.3.0/24

是为了保证一一对应关系吗?

对的。是为了方便获取参数。
(2)你这里实现的是网段到网段的转换是吧
比如内网192.168.2.3访问外网时,源地址会相应的变成192.168.3.3
这个对应是固定的吗,能否实现将源网段转换成目标网段随机的 IP

现在的映射是一一对应的。也就说要求你虚拟的网段跟源网段的掩码是一样的。

随机映射的情况,目前还没有遇到这种需求,所以就没有实现。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
17 [报告]
发表于 2011-02-27 08:40 |只看该作者
  1. #ifndef _IPT_NETSNAT_H_target
  2. #define _IPT_NETSNAT_H_target
  3. #define NETSIZE 37  // maxsize of net to net is : strlen(xxx.xxx.xxx.xxx/yy-xxx.xxx.xxx.xxx/yy)=37
  4. struct ipt_NETSNAT_info{
  5.         char netsnat[NETSIZE+1];
  6.         unsigned int excursion;
  7.         int flag;//flag=1 means destnet is big than sourcenet;
  8.                          //flag=0 means destnet is small than sourcenet.
  9. };
  10. #endif
复制代码
原先的那个 41 不用了啊

excursion 的作用是?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
18 [报告]
发表于 2011-02-27 08:44 |只看该作者
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j NETSNAT --netsnat 192.168.3.0/24

这个要求源和目的网段是在通过一个网段吗?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
19 [报告]
发表于 2011-02-27 08:54 |只看该作者
回复 17# Godbach
   
原先的那个 41 不用了啊

excursion 的作用是?


一开始用41是为了方便,因为最大37,所以没有刻意的要求。
用NETSIZE+1就可以了,节省空间啊,呵呵

excursion是两个网段的偏移。 比如:192.168.3.0/24-192.168.5.0/24的偏移就是 inet_network(192.168.5.0)-inet_network(192.168.3.0)
这样做转换的时候,就可以用(源地址+excursion)来得到转换后的源地址。当然了,如果目的网络比源网络要小,这时候info->flag=0,就用(源地址-excursion)


要求两个网络的掩码一样大就可以了,也就是源网络的IP必须在目的网络中一一对应。192.168.4.0/24-10.0.2.0/24,192.168.0.0/16-172.16.0.0/16,这些都是可以的。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
20 [报告]
发表于 2011-02-27 10:02 |只看该作者
要求两个网络的掩码一样大就可以了,也就是源网络的IP必须在目的网络中一一对应。192.168.4.0/24-10.0.2.0/24,192.168.0.0/16-172.16.0.0/16,这些都是可以的。


哦,你计算了偏移,那么只要掩码一样,源和目的的网段数量一致即可。像下面的这样应该也没问题:
192.168.1.128/25-192.168.3.0/25
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP