ufw 端口转发至 virtualbox 客户机

ufw 端口转发至 virtualbox 客户机

我的目标是能够使用我的台式机上的远程桌面连接到在我的 Linux 服务器上的 VirtualBox 中运行的 Windows XP。

我的设置:

  • 服务器 = debian squeeze,64 位,具有公共 IP 地址(主机)
  • virtualbox-ose 3.2.10(来自 debian repo)
  • Windows XP 作为客户机在 VBox 内运行;VBox 中的桥接网络模式,ip = 192.168.1.100
  • ufw 作为 debian 上的防火墙,打开了 3 个端口:22 / ssh、80 / apache 和 3389 用于远程桌面

我的问题:如果我尝试在家用电脑上使用远程桌面,我无法连接到 Windows 客户机。如果我先“ssh -X -C”进入 Debian 服务器,然后运行“rdesktop 192.168.1.100”,我就可以毫无问题地连接。Windows 防火墙配置为允许远程桌面连接,我甚至关闭了它(因为这里是多余的)以查看是否是问题所在,但没有什么区别。

由于我能够从本地子网内部进行连接,因此我怀疑我没有正确设置 Debian 防火墙来处理来自 LAN 外部的连接。以下是我所做的...

首先是我的 ufw 状态:

ufw status                                                                                                   
Status: active                                                                                                                          

To                         Action      From                                                                                             
--                         ------      ----
22                         ALLOW       Anywhere
80                         ALLOW       Anywhere
3389                       ALLOW       Anywhere

我编辑了 /etc/ufw/sysctl.conf 并添加:

net/ipv4/ip_forward=1

编辑 /etc/default/ufw 并添加:

DEFAULT_FORWARD_POLICY="ACCEPT"

编辑 /etc/ufw/before.rules 并添加:

# setup port forwarding to forward rdp to windows VM
*nat
:PREROUTING - [0:0]

-A PREROUTING -i eth0 -p tcp --dport 3389 -j DNAT --to-destination 192.168.1.100
-A PREROUTING -i eth0 -p udp --dport 3389 -j DNAT --to-destination 192.168.1.100

COMMIT

# Don't delete these required lines, otherwise there will be errors
*filter

<snip>

重新启动了防火墙等,但没有连接。

我在 debian 主机上的日志文件显示了这一点(我的公共 IP 地址已被删除,但在实际日志中是正确的):

Feb  6 11:11:21 localhost kernel: [171991.856941] [UFW AUDIT] IN=eth0 OUT=eth0 SRC=aaa.bbb.ccc.dd DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=45 ID=27518 DF PROTO=TCP SPT=54201 DPT=3389 WINDOW=5840 RES=0x00 SYN URGP=0 
Feb  6 11:11:21 localhost kernel: [171991.856963] [UFW ALLOW] IN=eth0 OUT=eth0 SRC=aaa.bbb.ccc.dd DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=45 ID=27518 DF PROTO=TCP SPT=54201 DPT=3389 WINDOW=5840 RES=0x00 SYN URGP=0 
Feb  6 11:11:24 localhost kernel: [171994.856701] [UFW AUDIT] IN=eth0 OUT=eth0 SRC=aaa.bbb.ccc.dd DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=45 ID=27519 DF PROTO=TCP SPT=54201 DPT=3389 WINDOW=5840 RES=0x00 SYN URGP=0 
Feb  6 11:11:24 localhost kernel: [171994.856723] [UFW ALLOW] IN=eth0 OUT=eth0 SRC=aaa.bbb.ccc.dd DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=45 ID=27519 DF PROTO=TCP SPT=54201 DPT=3389 WINDOW=5840 RES=0x00 SYN URGP=0 
Feb  6 11:11:30 localhost kernel: [172000.856656] [UFW AUDIT] IN=eth0 OUT=eth0 SRC=aaa.bbb.ccc.dd DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=45 ID=27520 DF PROTO=TCP SPT=54201 DPT=3389 WINDOW=5840 RES=0x00 SYN URGP=0 
Feb  6 11:11:30 localhost kernel: [172000.856678] [UFW ALLOW] IN=eth0 OUT=eth0 SRC=aaa.bbb.ccc.dd DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=45 ID=27520 DF PROTO=TCP SPT=54201 DPT=3389 WINDOW=5840 RES=0x00 SYN URGP=0 

虽然这是当前的设置/配置,但我也尝试了它的几种变体;我想也许 ISP 会因为某种原因阻止 3389,并尝试使用不同的端口,但仍然没有连接。

有什么想法吗?我是不是忘记修改某个文件了?

答案1

我其实不是在讽刺这一点,但是你需要用比 UFW 更好的东西来管理你的 IPTAbles“防火墙”。

它适合桌面使用,但它的设计目的仅仅是桌面使用,而不是“服务器级”使用。

我强烈建议您坐下来花一些时间学习 NetFilter/IPTables 的工作原理,并熟悉如何直接使用这些命令。如果您担心会破坏某些东西,请在更改之前备份您的 IPTables 配置,或者甚至进行基本的“Git”版本控制设置,这将帮助您进行实验并获得信心。

答案2

这为我解决了这个问题:

sudo ufw allow proto tcp from 192.168.1.100 to any port 22

问题是响应被阻止了。希望这对某些人有帮助。

答案3

不确定您是否仍需要帮助。我遇到了完全相同的问题,而且问题相当简单。目标服务器没有默认网关条目,也没有将回复带回网关。设置默认网关后,一切正常。您可以通过键入route -n(使用 -n 避免耗时的 DNS 查找每个条目)来检查您的路由。

答案4

我只是这样做了:ufw 允许 [虚拟机 IP 地址]

相关内容