- 论坛徽章:
- 0
|
这个问题有人提出来:
http://bbs.chinaunix.net/viewthread.php?tid=817960
今天想在Linux上来实现这个功能,不过因为没有任何进一步资料,暂时没有成功,想把今后几天的实验陆续写上来,感兴趣的朋友可以一起来讨论。
我的理论依据:
1、Linux上开DHCPD,如果客户端是“DHCP Client”,一切OK,略过不表;
2、如果客户端是任一地址/网关/DNS,比如:
- PC(192.168.0.100/24,gw:192.168.0.1)-------eth0[172.16.0.1]-Linux Box-eth1--internet
复制代码
这样,Linux box开any source address的snat,理论上192.168.0.100就可以被转换出去,但是问题在于:
1、192.168.0.100在没有路由的情况下,如何把包发给Linux Box?
2、如果第一个问题解决了,回来的数据包,eth0又如何会在没有路由的情况下,把数据包回传给PC?
对于问题1:可以在Linux Box eth0上ARP代理,这样,当PC想上网,它会询问:
"192.168.0.1的MAC地址是多少"?因为eth0上开了arp 代理,所以会回它一个“192.168.0.1 的MAC是eth0's MAC”,这样,在PC机上,应该会有如下项:
192.168.0.1 -- eth0's MAC,
所以,PC发送的CU的HTTP数据包大致如下:
eth0's MAC | PC's MAC | 0x0800 | CU'IP | 192.168.0.100 | TCP |……
Linux Box SNAT这个数据包是没有问题的,除非限定了来源IP!!!
数据包返回后,会把数据包回传给192.168.0.100,这需要Linux上有一条路由(以MAC表示目标)或者有一条IP-MAC对应项:
192.168.0.100 -- PC'MAC
一切都OK了!!!!
Linux Box开了arp 代理会自动生成这一项么??平时没有注意,管它的,试了再说。
[空想理论就到此结束]
——————————————————————————————————————
做实验吧,结果一开始就失败了:
我先开了eth0的arp代理,再来改自己的IP地址,但是由于改了地址,Windows主机发送了一个免费ARP请求,“192.168.0.100的MAC是多少?”本来平时是用来检测地址冲突的,可惜因为我开了ARP代理,eth0回给我一下“192.168.0.100的MAC是eth0's MAC”,所以,我就“地址冲突”了!!
失败!不过至少证明我的想法初步可以实现,我们假设用户是“事先改了IP地址,再接入局域网”的,明天继续做实验!!!
————————————————————————————————————————
我不知我的想法最终能实现不,不过,即使实现了,也有如下问题:
1、今天实验中的免费ARP请求的地址冲突问题;
2、客户端如果即非dhcp client,也没有配置IP地址;
3、没有配置网关或DNS;
4、如果客户端刚好配的同网段,以上例,配的是172.16.0.254,但是GW不是0.1,而是0.2,这样,如果0.2开了机,会同时有两个主机应答它的arp
明天,继续!!! |
|