- 论坛徽章:
- 0
|
回复 #1 startX 的帖子
你这个问题要说清楚,要涉及到IP包的原理
我们都知道一个IP包,包括了源地址与目标地址。
一台A机,一台B机,一个网关,A机通过网关的外网地址(设为C)访问B机,
A机发出一个源地址是A,目标地址是C,经过网关NAT,目标地址改为了B,
网关把这个源地址为A,目标地址为B的包转发到了B,
B收到后返回数据包,发送给了A。
但是A不认为这个包是他要的,因为他发送的是A+C的数据包,数据包没有从原路返回。
所以不通。
简单描述如下:
A发送包为
A->C->B
B返回包为
B->A
没有从原路返回包。
要解决这个问题,得把网关发送到B的包再NAT是可以的,即包
a->c 这个包的源地址与目标地址都修改,即可
假设 A机 192.168.3.1 B机192.168.3.2 网关外网为58.222.111.2
nat伪装一条telnet, 命令如下
iptables -t nat -A PREROUTING -d 58.222.111.2 --dport 23 -j DNAT --to 192.168.3.2
iptalbes -t nat -A POSTROUTING -d 192.168.3.2 --dport 23 -j MASQUERADE
iptables -A FORWARD -d 192.168.3.2 --dport 23 -j ACCEPT
这样IP包就走通了,
发出去是
a->c->b
返回是
b->c->a
这样的方法有个缺点,即在B机的日志上只有网关C机的登陆地址,没有每个客户端的登陆地址。
[ 本帖最后由 wxxszzz 于 2009-12-28 20:24 编辑 ] |
|