我们单位也是VPN(虚拟专用网)

解决方案 »

  1.   

    你可以用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
      

  2.   

    问题的关键在于服务器的返回包源地址错误. 
    下面的分析假定你要将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变换了) 
      

  3.   

    回复人: whwqm(Bluesky) ( ) 信誉:100  2004-08-14 17:33:00  得分: 0  
     
     
       外面很多商用软件,都不用设置服务器任何参数就能实现,它怎么做到的?
      
     
    举个例子看看,一般这种都是在内网的机器上有一个服务程序(这个服务程序有个线程随时去连接服务端,如果外网的服务器要去连接这个内网机器的话,就使用内网机器主动调用的那个连接)
      

  4.   

    就是Network address translation
    ISP 一般都用NAT