一般的外网访问内网是怎么实现的?自己编写这个程序有没有可能? 我们单位也是VPN(虚拟专用网) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以用IPTABLES做DNAT: iptables -t nat -A PREROUTING -i eht1 -d 202.96.*.* -p tcp --dport 80 -j DNAT --to-destination 192.168.123.8:80 问题的关键在于服务器的返回包源地址错误. 下面的分析假定你要将192.168.123.8映射为202.96.0.1,作NAT变换的linux机器(你的缺省网关)的内网地址为192.168.123.254。希望和192.168.123.8在同一个网段的机器(比如192.168.123.1)也可以访问映射后的地址,让我们来看看数据包所走的路径吧: 1)192.168.123.1 请求连接202.96.0.1,由于不在一个网段,这个包将被发往缺省网关192.168.123.254; 2)192.168.123.254对包进行nat变换,目的地址变为192.168.123.8,源地址不变; 3)192.168.123.8将收到这个来自于192.168.123.1的连接请求,发出一个响应包,目的地址为192.168.123.1,源地址为192.168.123.8,由于在目的地址和本机在同一个网段,这个包将直接发往192.168.123.1 4)192.168.123.1收到一个响应包,源地址为192.168.123.8,但是该机并没有对这个地址发起连接请求,于是将该包丢弃,继续等待来自202.96.0.1的响应。 这就是你所看到的现象,表现为浏览器无法连接该地址。如果你用sniffer 在192.168.123.1上捕捉,可以看到来自于192.168.123.8的syn,ack包,现在明白了吧。 只要能让响应包的源地址到达192.168.123.1的时候变为202.96.0.1,那么连接就可以正常建立了,怎么做,想到了吗? iptables -t nat -A POSTROUTING -p tcp -s 192.168.123.1/32 -d 192.168.123.8/32 -j SNAT --to 192.168.123.254 再想一想包的路径,你就会明白这条规则的意思了(注意不要要前面的规则的 -i 选项,否则不对内网地址做nat变换了) 回复人: whwqm(Bluesky) ( ) 信誉:100 2004-08-14 17:33:00 得分: 0 外面很多商用软件,都不用设置服务器任何参数就能实现,它怎么做到的? 举个例子看看,一般这种都是在内网的机器上有一个服务程序(这个服务程序有个线程随时去连接服务端,如果外网的服务器要去连接这个内网机器的话,就使用内网机器主动调用的那个连接) 就是Network address translationISP 一般都用NAT C#错误 按钮模拟 Ctrl+Shift键 Windows程序套打求助 如何上传一个固定路径下文件(在线等待~) 帮我找找错误 关于dropdownlist控件事件的问题 现在很多共享软件在注册时都用到了一个机器码,请问各位这个机器码怎么得到的? C#中有没有‘饼图’类型 C#远程运行一个应用程序,该怎么编啊(shell) 请问如何用C#程序共享一个有读写权限的文件夹 数据为何删除不了 关于C#和C工作的选择,请大家帮忙分析一下利弊!心中十分烦恼,谢谢大家
iptables -t nat -A PREROUTING -i eht1 -d 202.96.*.* -p tcp --dport 80 -j DNAT --to-destination 192.168.123.8:80
下面的分析假定你要将192.168.123.8映射为202.96.0.1,作NAT变换的linux机器(你的缺省网关)的内网地址为192.168.123.254。希望和192.168.123.8在同一个网段的机器(比如192.168.123.1)也可以访问映射后的地址,让我们来看看数据包所走的路径吧:
1)192.168.123.1 请求连接202.96.0.1,由于不在一个网段,这个包将被发往缺省网关192.168.123.254;
2)192.168.123.254对包进行nat变换,目的地址变为192.168.123.8,源地址不变;
3)192.168.123.8将收到这个来自于192.168.123.1的连接请求,发出一个响应包,目的地址为192.168.123.1,源地址为192.168.123.8,由于在目的地址和本机在同一个网段,这个包将直接发往192.168.123.1
4)192.168.123.1收到一个响应包,源地址为192.168.123.8,但是该机并没有对这个地址发起连接请求,于是将该包丢弃,继续等待来自202.96.0.1的响应。
这就是你所看到的现象,表现为浏览器无法连接该地址。如果你用sniffer 在192.168.123.1上捕捉,可以看到来自于192.168.123.8的syn,ack包,现在明白了吧。 只要能让响应包的源地址到达192.168.123.1的时候变为202.96.0.1,那么连接就可以正常建立了,怎么做,想到了吗? iptables -t nat -A POSTROUTING -p tcp -s 192.168.123.1/32 -d 192.168.123.8/32 -j SNAT --to 192.168.123.254 再想一想包的路径,你就会明白这条规则的意思了(注意不要要前面的规则的 -i 选项,否则不对内网地址做nat变换了)
外面很多商用软件,都不用设置服务器任何参数就能实现,它怎么做到的?
举个例子看看,一般这种都是在内网的机器上有一个服务程序(这个服务程序有个线程随时去连接服务端,如果外网的服务器要去连接这个内网机器的话,就使用内网机器主动调用的那个连接)
ISP 一般都用NAT