讨论,2.6kernel多IP地址时的目的地址转换

独孤九贱
讨论,2.6kernel多IP地址时的目的地址转换

网络情况:
偶有100个公网IP,只有一个用于本机通讯,其它99个需要做目的地址转换。
2.6上面,好像只有把100个地址全部配置到网络接口上,目的地址转换才能正常工作,否则,本机无法进行其它99个IP地址的ARP应答,大家有没有什么好的方法??(配100个IP地址太累且没有必要)

查了一个资料:
说是老内核当设置了地址转换,启用代理ARP时,内核设置RTCF_DNAT 标志,就可自动进行代理的ARP应答了,不用全配IP地址,也看了一下代码:

[code]        if (addr_type == RTN_LOCAL) {
                   ... ... ...
        } else if (IN_DEV_FORWARD(in_dev)) {
            if ((rt->rt_flags&RTCF_DNAT) ||
                (addr_type == RTN_UNICAST  && rt->u.dst.dev != dev &&
                 (arp_fwd_proxy(in_dev, rt) ||
                         pneigh_lookup(&arp_tbl, &tip, dev, 0)))) {
[/code]

的确是这样。但是,好像在2.6上,RTCF_DNAT标志没有再被使用了……
[code]RTCF_SNAT
RTCF_DNAT
RTCF_NAT
这些标志不再被IPv4使用。它们以前被FastNAT特性使用,该特性
在2.6内核中已经被删除(参见第32章“最近废弃的选项”小节)。[/code]
大家有没有好的方法来解决这个问题呢?讨论一下。

[[i] 本帖最后由 独孤九贱 于 2008-4-30 10:38 编辑 [/i]]

platinum
ISP 有两种方式接入
1、全部是公网 IP,下一跳也是公网地址
2、ISP 给了一个私网 IP,下一条也是私网 IP,同时给了一堆公网地址(池)
不知道九贱的是哪种
如果是第一种,那么没办法只能绑定 IP,可以用脚本来自动实现
如果是第二种,那么只需要绑定一个公网 IP 就可以了,因为这个池是远程路由器强行路由过来的,有了一个公网 IP 地址等于就有了一个落脚点,所以不再涉及前面的问题

独孤九贱
回复 #2 platinum 的帖子

第一种……好像是内核不提供这样的功能,偶用华为、思科路由器是有这个功能的。
不过我想有两种方式可以解决:
1、把内核的ARP代理稍改一下,只是担心有什么副作用。
2、做一个ARP请求监听程序,自己构造ARP应答也是一个解决办法。

wysilly
arpd( iprouter2 自带的arpd 不会自动reply arp 请求,arpd 会自动回应),

[url]http://www.citi.umich.edu/u/provos/honeyd/[/url]

什么时候用arpd?

当对端(接入方),没有明确在route table中指定分配给你的ip段的所使用的路由ip时,即你与对端在同一广播段时使用,否则不用.

[[i] 本帖最后由 wysilly 于 2008-4-30 12:13 编辑 [/i]]

独孤九贱
[quote]原帖由 [i]wysilly[/i] 于 2008-4-30 12:08 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6573820&ptid=997920][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
arpd( iprouter2 自带的arpd 不会自动reply arp 请求,arpd 会自动回应),

[url]http://www.citi.umich.edu/u/provos/honeyd/[/url]

什么时候用arpd?

当对端(接入方),没有明确在route table中指定分配给你的ip段的所 ... [/quote]
能否说详细点?

wysilly
举例说时使用方法: 比如你有10.0.0.0/25的网段,你的接入方使用(10.0.0.1/25),你使用(eth1-10.0.0.2/25做为nat的对外接口),对内部192.168.0.0/24的网络nat
arp -i  eht1 10.0.0.0/25

这时假如192.168.0.1在数据传输,数据流为.
192.168.0.1->nat(转为 10.0.0.3)->10.0.0.1->internet

回包为
internet ->10.0.0.1(此设备与10.0.0.3在同一网段,这时它就会询问arp信息)->nat(arpd回答10.0.0.3在这,mac地址与10.0.0.2相同)->192.168.0.1

同时如果在10.0.0.0/25段中有不用nat的对外机器,这时arpd通过侦听网络中的arp广播信息来,自动更新它所维护的arp表.

独孤九贱
是的,我看了其代码实现,也就是我3楼中说的第二种方式,不过这个软件真的不容易编译呀,configure文件做得有点奇怪,源码中也使用了低版本gcc的宏,呵呵,不过不论如何,我已经安装好它了,它也能正常工作了。
谢谢楼上的!!

platinum
[quote]原帖由 [i]独孤九贱[/i] 于 2008-4-30 14:17 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6573935&ptid=997920][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
是的,我看了其代码实现,也就是我3楼中说的第二种方式,不过这个软件真的不容易编译呀,configure文件做得有点奇怪,源码中也使用了低版本gcc的宏,呵呵,不过不论如何,我已经安装好它了,它也能正常工作了。 ... [/quote]
也就是说,arpd 解决了你的问题吗?