2005-5-26 11:28
cord7134
各位大侠,小女子开发过程中遇到难题,请求帮助! <br />一台pc 机通过modem上网,连接是pppoe,modem是基于linux系统的设备,其中有一项功能就是通过dhcpserver把自已的wan口地址,也就是ppp0的ip分配给pc的lan端,这样一来PC看上去好像是直接在拨号上网.但是这样一来,PC就如法直接访问直接相连的modem的lan端了,因为公网地址和私网地址无法直接沟通. <br />我的解决方案是在内核防火墙做些改动,也就是在netfilter里面的hook函数做处理.在NF_IP_PRE_ROUTING处把来自PC的包的源地址用一个私网地址代替,然后再重新计算一下ipchecksum,然后返回NF_ACCEPT,使包继续传输,这样我认为可以让modem认为是来自私网的包,然后进行本地的处理.然后在NF_IP_POST_ROUTING处把返回的包的目的地址改回公网地址,同时构造成mac层的包直接向下层传输(dev_queue_xmit(skb)),mac包的目的地址为PC的mac地址. <br />这样是否可以解决PC对modem端的访问?但是我这样是fail的,问题是我对kernel网络code不太熟,希望高手能不能帮我分析一下,我这种解决方法是不是存在漏洞?欢迎大家提供宝贵意见. <br /><br />
2005-5-26 13:20
老老鼠
<!--QuoteBegin-cord7134+2005-05-26 11:28:01--><div class='quotetop'>QUOTE(cord7134 @ 2005-05-26 11:28:01)</div><div class='quotemain'><!--QuoteEBegin-->各位大侠,小女子开发过程中遇到难题,请求帮助! <br />一台pc 机通过modem上网,连接是pppoe,modem是基于linux系统的设备,其中有一项功能就是通过dhcpserver把自已的wan口地址,也就是ppp0的ip分配给pc的lan端,这样一来PC看上去好像是直接在拨号上网.但是这样一来,PC就如法直接访问直接相连的modem的lan端了,因为公网地址和私网地址无法直接沟通. <br />我的解决方案是在内核防火墙做些改动,也就是在netfilter里面的hook函数做处理.在NF_IP_PRE_ROUTING处把来自PC的包的源地址用一个私网地址代替,然后再重新计算一下ipchecksum,然后返回NF_ACCEPT,使包继续传输,这样我认为可以让modem认为是来自私网的包,然后进行本地的处理.然后在NF_IP_POST_ROUTING处把返回的包的目的地址改回公网地址,同时构造成mac层的包直接向下层传输(dev_queue_xmit(skb)),mac包的目的地址为PC的mac地址. <br />这样是否可以解决PC对modem端的访问?但是我这样是fail的,问题是我对kernel网络code不太熟,希望高手能不能帮我分析一下,我这种解决方法是不是存在漏洞?欢迎大家提供宝贵意见.<br />[right][snapback]465595[/snapback][/right]<br /><!--QuoteEnd--></div><!--QuoteEEnd--><br /><br /><br />網絡開髮我做不來,我們平時做撥號接入的時候都是用路由器做的,內外網IP通信的問題很容易解決