QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1875|回复: 16

关于端口映射的问题,请指教!

[复制链接]
发表于 2004-12-6 23:57:18 | 显示全部楼层 |阅读模式
环境是一台 rh9 主机,一张网卡,有一个内网ip(如10.22.65.138),同时由上级服务器提供一个公网ip(a.b.c.d),访问该公网ip即跳转至该服务器。

现想在该服务器同网段内的一台服务器主机2(如10.22.65.137)开通一个web服务,利用rh9主机的 8080 端口映射至 主机2 的 8080 端口。 想达到实现使用公网ip加8080端口实现访问内部web服务器的目的。

我参照了一些网上的文章,大部分是nat(双网卡形式),不知道这个对于我单网卡是否适用。

能否概要的讲一下实现方法,谢谢!

我利用下面的文章,我做了如下设置:
将主机2的网关设为rh9主机的内部地址,即10.22.65.138。
然后为了测试,将后面文章里的公网地址暂时用138代替。
但是这样似乎还是不行。

我参照的文章:
Q:一局域网192.168.1.0/24,有web和ftp服务器192.168.1.10、192.168.1.11,网关linux,内网eth0,IP为192.168.1.1,外网eth1,IP为a.b.c.d,怎样作NAT能使内外网都能访问公司的服务器?
A:# web
# 用DNAT作端口映射
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
# 用SNAT作源地址转换(关键),以使回应包能正确返回
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
# 一些人经常忘了打开FORWARD链的相关端口,特此增加
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT

# ftp
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
# 用DNAT作端口映射
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
# 用SNAT作源地址转换(关键),以使回应包能正确返回
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1


--
发表于 2004-12-7 20:29:41 | 显示全部楼层
iptables -t nat -A PREROUTING -p udp -d a.b.c.d --dport 8080 -j DNAT --to 10.22.65.137:80
iptables -t nat -A POSTROUTING -d 10.22.65.137 -p udp --dport 80 -j SNAT --to 10.22.65.138
回复

使用道具 举报

 楼主| 发表于 2004-12-8 11:11:09 | 显示全部楼层
似乎还是不太行。
这里为什么使用udp协会呢?

是否需要其他的注意事项呢?
回复

使用道具 举报

发表于 2004-12-8 11:28:25 | 显示全部楼层
添加一个eth0:0就比较好办了。
回复

使用道具 举报

发表于 2004-12-8 11:34:55 | 显示全部楼层
[quote:0da39ffec0="yixuan178"]似乎还是不太行。
这里为什么使用udp协会呢?

是否需要其他的注意事项呢?[/quote]

偶只是举个例子,你可以自己将udp换成tcp
回复

使用道具 举报

 楼主| 发表于 2004-12-8 17:40:02 | 显示全部楼层
为了测试,我做了一些简化,要实现的目的是:在ie里输入 http://10.22.65.138:8080
实现访问内部网络 10.22.65.137 的web服务(port 80),这里138上已经有了一个web服务。137和138机器在同一hub上,网关都为10.22.65.129。
我做了如下设置:
iptables -t nat -A PREROUTING -p tcp -d 10.22.65.138 --dport 8080 -j DNAT ---to10.22.65.137:80
iptables -t nat -A POSTROUTING -d 10.22.65.137 -p tcp --dport 80 -j SNAT --to 10.22.65.138:8080
iptables -A FORWARD -o eth0 -d 10.22.65.137 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 10.22.65.137 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

但是不能生效,恩。 正常的访问 http://10.22.65.137 http://10.22.65.138 都是正常的。

而且端口8080也是可达的。

不知道各位是否还有其他的解决办法。

我的主机只有一张网卡!  感谢各位!
回复

使用道具 举报

发表于 2004-12-9 10:42:43 | 显示全部楼层
我有个另类的方法:
在10.22.65.137的机子上启动sshd
在10.22.65.138的机子上运行ssh -LC 8080:10.22.65.137:8080 [email protected]
注:uname为10.22.65.137机子上的用户名。
回复

使用道具 举报

 楼主| 发表于 2004-12-9 12:33:55 | 显示全部楼层
不太行,C参数Bad forwarding specification 'C'提示。
我用了
ssh -L 8080:10.22.65.137:80 [email protected]
,没能达到效果。嘿。

能介绍一下你的思路吗?
回复

使用道具 举报

发表于 2004-12-9 13:09:11 | 显示全部楼层
远程端口转发,可以没有-C
你写错了,是
ssh -L 8080:10.22.65.137:8080 [email protected]
不是8080:10.22.65.137:80
少了一个80
利用SSH把10.22.65.137的8080端口转发到10.22.65.138的8080端口,这样对10.22.65.138机子的8080端口的访问实质就是对10.22.65.137机子8080端口的访问了,并且这个链路还是经过加密的。
命令行中的第一个8080指本机(10.22.65.138)的端口,第二个8080是启动sshd服务机子(10.22.65.137)的端口
运行后会提示你输入username在10.22.65.137机子上的密码,成功登录后要保留这个窗口(如果你的Xwindow下)
回复

使用道具 举报

发表于 2004-12-9 13:18:54 | 显示全部楼层
记住,10.22.65.138这台机子在8080端口上不能有其他服务,否则会报错。
如果你觉得每次输入密码很麻烦,就在10.22.65.138上建立一个同名的username用户,密码和10.22.65.137上的也一样,并用这个用户名启动10.22.65.138
回复

使用道具 举报

发表于 2004-12-10 11:22:08 | 显示全部楼层
没下文了?
我还有更专业的方法!昨天去图书城看到的!
回复

使用道具 举报

发表于 2004-12-10 15:22:57 | 显示全部楼层
在10.22.65.138建立这样一个文件/etc/xinetd.d/webcache内容如下:
service webcache
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = root
        redirect        = 10.22.65.137 8080
}
然后:
service xinetd restart
回复

使用道具 举报

发表于 2004-12-10 15:24:28 | 显示全部楼层
在RH9中验证通过的,其他系统不敢保证。
回复

使用道具 举报

 楼主| 发表于 2004-12-10 20:54:43 | 显示全部楼层
I just try!

Thank you@!
回复

使用道具 举报

 楼主| 发表于 2004-12-11 12:41:28 | 显示全部楼层
[quote:9abae92fc7="xmlcf"]在10.22.65.138建立这样一个文件/etc/xinetd.d/webcache内容如下:
service webcache
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = root
        redirect        = 10.22.65.137 8080
}                                                 ~~~~~~
                                                         这个是138的端口还是137端口。
                              我现在是137的80端口,138用8080。

                  郁闷!

然后:
service xinetd restart[/quote]
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 21:32 , Processed in 0.098625 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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