虚拟机端口转发,BOSS今天要看结果,求大家帮忙

T0NYLEE 发布于 2012/03/05 03:49
阅读 2K+
收藏 1

现在的状态:

服务器上装了一个虚拟机,服务器IP假设1.2.3.4,虚拟机IP192.168.122.2

现在能够通过ssh访问服务器,然后在服务器上再ssh访问192.168.122.2,虚拟机的ssh端口是默认的22

虚拟机访问外网正常

需要实现:

在外网通过服务器外网IP1.2.3.4的2222端口直接访问虚拟机的ssh

看了两天的iptables教程,规则怎么都写不对,主要是很多基本原理还没搞清楚。

只知道要通过DNAT将外网IP的2222转到虚拟机的22上,然后再用SNAT将内网的22转到外网的2222上。

BOSS今天要看结果,求大家帮帮忙了。万分感谢!

以下是问题补充:

@T0NYLEE:我是在Ubuntu Server 11.10上装的KVM虚拟机 (2012/03/05 13:21)
加载中
0
firebull
firebull
试试rinetd,支持linux,windows下端口转发,貌似不错。
firebull
firebull
@Tony Lee niinoo : 可以的啊,我现在就是用来转发FTP的啊
T
T0NYLEE
感谢,这个东西配置转发太简单了!可惜了FTP不能用这个转发
0
foxhackd
foxhackd
你用的是什么虚拟机?VM,VBOX?一般这两个虚拟机都支持端口转发的
T
T0NYLEE
我用的kvm
xu81.com
xu81.com
他说的虚拟机可能是openvz之类的虚拟化技术
0
樊睿
樊睿

直接编辑/etc/sysconfig/iptables

-A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.122.2:22

-A POSTROUTING -s 192.168.2.0/255.255.255.0 -o 网卡名 -j SNAT --to-source  1.2.3.4

T
T0NYLEE
返回不用再将2222转到22了么?
T
T0NYLEE
ubuntu下没有这文件啊,抱歉这会太忙了,没时间让我慢慢google了
0
Jackarain
Jackarain

配置不来就用软件吧, 就一个portmap

http://www.oschina.net/p/portmap

这个我写的.

0
清凌渡
清凌渡

不用iptables,大材小用了。直接使用ssh端口转发吧,在服务器终端下运行:

ssh -D 2222:虚拟机IP地址

然后可以看下端口:

netstat -ano | grep :2222

确保2222端口已经开启并监听,然后就可以直接连接1.2.3.4:2222了~

 

0
厦门萝卜
厦门萝卜

http://ppabc.blog.51cto.com/203980/796588

iptables外网一端口通过NAT转发内网一服务器端口上

0
T
T0NYLEE
sudo iptables -L -t nat能看到以下内容:

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24    masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24    masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24



MASQUERADE是装好虚拟机Ubuntu自动加上的规则,我应该就不用加POSTROUTING了吧,PREROUTING按照如下规则已经加上去了(参考的@樊睿),sudo iptables -L -t nat也能看到

-A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.122.2:22

但还是没效果
T
T0NYLEE
@皮总 : 看了啊……现在不就是按照你nat文档里面第一条《Iptables NAT 转发规则》配的么……
皮总
皮总
看我上面的文档 , 本人一直以这种方式在用, 不看你就自己折腾
0
皮总
皮总

引用来自“Tony Lee niinoo”的答案

sudo iptables -L -t nat能看到以下内容:

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24    masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24    masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24

MASQUERADE是装好虚拟机Ubuntu自动加上的规则,我应该就不用加POSTROUTING了吧,PREROUTING按照如下规则已经加上去了(参考的@樊睿),sudo iptables -L -t nat也能看到

-A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.122.2:22

但还是没效果

那为毛我是这样的:

 

root@discuz:~# iptables -L -vn -t nat
Chain PREROUTING (policy ACCEPT 203K packets, 14M bytes)
 pkts bytes target     prot opt in     out     source               destination
  176 10222 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5222 to:192.168.1.24:5222

Chain POSTROUTING (policy ACCEPT 5511 packets, 336K bytes)
 pkts bytes target     prot opt in     out     source               destination
  433 25642 MASQUERADE  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5222

Chain OUTPUT (policy ACCEPT 5768 packets, 351K bytes)
 pkts bytes target     prot opt in     out     source               destination

皮总
皮总
好,我两个机器试下
T
T0NYLEE
难不成系统的差异有这么大?
T
T0NYLEE
我道行太低,看不出你这输出与我的有什么不一样。prerouting跟我之前配的可以说是一模一样,除了我source与destination里面显示的是anywhere而不是0.0.0.0/0。postrouting我觉得也一样吧。水平太烂,求指点
皮总
皮总
我这个工作得很正常, 转发 openfire 的端口本机的端口 5222 到 192.168.1.24 的 5222
0
皮总
皮总
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z

iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to 192.168.122.2:22
iptables -t nat -A POSTROUTING -p tcp --dport 22 -j MASQUERADE

皮总
皮总
执行一下 ssh 就连不上了... 我随便怎么执行都没事呀
T
T0NYLEE
本来我是将规则加到ufw的before.rules里面的,始终没效果 按照你的写成个脚本,执行了一下,ssh现在连不上了……还要跑到机房去……我做错了哪里。大侠!
返回顶部
顶部