LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: zhhxie

如何实现端口映射(重定向)

[复制链接]
 楼主| 发表于 2005-8-13 14:13:20 | 显示全部楼层

还是不行

Post by daemeon
已经更正了

还是不行,我在这里提问这个问题之前,已经查过了一些资料,这条命令也用过,就是不行。

应该是可以通过iptables实现的。。

还有一个实现方法,就是通过LVS的VS/TUN的方式,让192.168.1.245作为调度器,让192.168.1.247作为Real Server,LVS的相关介绍在这里:
http://www.linuxvirtualserver.org/zh/index.html

如果能用iptables实现,那就最好了,弄LVS比较麻烦。
回复 支持 反对

使用道具 举报

发表于 2005-8-13 14:21:29 | 显示全部楼层
1 转发(forward)你开没有?
2 192.168.1.245是不是网关?

如果满足上面两个条件,添加上面那条dnat规则后,在192.168.1.0/24(假设子网掩码为255.255.255.0)网断外的主机访问192.168.1.245:8080应该没有问题。

假设一台192.168.1.0/24网断内的主机A访问192.168.1.245:8080, 经过dnat之后目标地址变为192.168.1.247:80. 192.168.1.247:80回应的数据没经过nat就直接发送到主机A, 由于这个数据不是来自192.168.1.245:8080, 主机A就无法识别.

192.168.1.245不是网关的情况根上面的类似。

添加下面这条规则应该可以解决网断内访问的问题,处理192.168.1.245不是网关的方法类似。
iptables -t nat -A POSTROUTING --protocol tcp --source 192.168.1.0/24 --destination 192.168.1.247 --dport 80 -j SNAT --to-source 192.168.1.245
回复 支持 反对

使用道具 举报

发表于 2005-8-13 14:29:22 | 显示全部楼层
Rewrite
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-14 02:03:23 | 显示全部楼层

Very ThX

非常感谢!
1. IP Forward已经打开:
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
1
2. 192.168.1.245不是网关

我照做了:

iptables -t nat -A PREROUTING --protocol tcp --destination 192.168.1.245 --dport 8080 -j DNAT --to-destination 192.168.1.247:80

iptables -t nat -A POSTROUTING --protocol tcp --source 192.168.1.0/24 --destination 192.168.1.247 --dport 80 -j SNAT --to-source 192.168.1.245

已经能够实现192.168.1.245:8080 -> 192.168.1.247:80

现在有一个问题,就是如果两台机不是同一个网段呢,如:
220.194.59.x:8080 -> 211.96.27.x:80
回复 支持 反对

使用道具 举报

发表于 2005-8-14 02:46:29 | 显示全部楼层
第二条规则不要加--source 192.168.1.0/24就可以了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-14 14:48:40 | 显示全部楼层

ok

谢谢。。。已经能够实现:
220.194.59.x:8080 -> 211.96.27.x:80
了。

还有一个问题要请教你,就是如何设置,让客户端不直接去连接221.96.27.x,即所有的数据都经过220.194.59.x。
回复 支持 反对

使用道具 举报

发表于 2005-8-15 01:32:17 | 显示全部楼层
apache有访问控制,也可以221.96.27.x在加过滤规则三.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-26 22:55:02 | 显示全部楼层

ssh tunnel

谢谢。我还有一个问题就是不能用SSH隧道:

我登录B服务器,执行:
ssh -L 9999:A:80 root@A -N
输出A服务器的root口令并成功通过验证
可以在B上连接到本机的端口9999,但别的机子不能

在B上:
nmap localhost
时,看到9999这个端口是打开着的。
但是,当执行nmap B时,却不能够看到。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-26 22:59:45 | 显示全部楼层

ok

加了选项-g,现在可以使用了。。

-g      Allows remote hosts to connect to local forwarded ports.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表