X 通过 NAT 转发

Posted

技术标签:

【中文标题】X 通过 NAT 转发【英文标题】:X forwarding through NAT 【发布时间】:2013-12-19 18:54:18 【问题描述】:

我正在尝试在 AWS Linux 机器上从头开始安装 Oracle 11g。为此,我相信我需要启用 X 转发,以便我可以使用图形安装。我从来都不擅长 X 服务器/客户端的情况。

设置

cygwin64(本地) NAT 实例(亚马逊) 私有子网中的 Linux 实例可通过所述 NAT(亚马逊)访问

我想通过 NAT 将 Oracle 安装从 Linux 实例转发到我的本地计算机。任何帮助,将不胜感激。我很乐意提供更多信息,尤其是因为到目前为止我还没有提供太多信息。我也很高兴听到我说这一切都错了,而且从命令行安装 Oracle 很容易。

【问题讨论】:

我发现 X11 安装程序在本地时很痛苦,而且远程速度非常慢,即使在 LAN 上也是如此。我总是使用response files 并进行静默安装。这不是很容易,但它更容易,并且可重复,这是一个奖励。这对你来说可行吗? @Alex:我知道这一点,但我搜索的文档太差了,我什至没有考虑它。如果那里有很好的资源,我很乐意尝试这个。恐怕在这种情况下,“好”可能意味着“在整个过程中握着我的手”。 哪个更令人担忧,运行静默安装还是创建响应文件?如果您熟悉这些选项,后者并不是那么糟糕。您可以从安装中包含的模板开始。您还可以生成一个响应文件作为(本地)安装的一部分,这将反映您在 GUI 中选择的所有选项,您只需要更改一些简单的内容,例如 ORACLE_HOME 路径、用户和组名,等 做不到这一点,你如何访问AWS(我不熟悉!);你有ssh 访问权限吗?在ssh 上建立 X11 隧道可能相当轻松。 那篇文章我应该提供更多信息,因为它不是每个人都知道的。我可以通过 SSH 访问 NAT,这反过来又让我可以通过 SSH 访问 Linux 服务器。但是,我不能直接通过 SSH 连接到 Linux 服务器。 【参考方案1】:

客户端和服务器在 X 的世界中看起来“倒退”,因为您的工作站是“服务器”,提供显示设备和键盘/鼠标的服务...而程序您通常是远程运行的,是使用这些显示和输入设备服务的“客户端”。

因此,您要运行的程序需要能够“向后”连接到您的计算机,但您可以暂时忘记 NAT 方面,因为这不是直接相关的。重要的是您有一种方法可以建立端到端的 SSH 连接链,这应该是您所需要的,因为 SSH 可以完成这项工作。在回答这个问题时没有任何防火墙受到损害。

我不知道 cygwin 有什么样的 SSH 实用程序,但大概可以比较。我首先在端到端 Linux 上测试了以下内容,然后在工作站的 Windows 7 台式机上将“ssh”替换为“\Program Files (x86)\PuTTY\putty.exe”。两种情况都按预期工作,而且参数很方便。

我们将 NAT 机器的主机名称为“natbox”,将数据库称为“databox”。

在您的本地计算机上,您的 X 服务器可能正在侦听端口 6000,因此我们需要将流量返回给它。

workstation $ ssh -R 127.0.0.1:5555:127.0.0.1:6000 natbox

我随意选择了 5555,但任何高于 1024 的未使用值都应该可以工作。您也可以使用 6000,但它使示例比现在更加违反直觉。

第一个 IP/端口对 127.0.0.1:5555 指的是远程机器(natbox)。您的 SSH 会话将打开一个侦听远程计算机上环回接口的端口 5555 的套接字。第二个 IP/端口对 127.0.0.1:6000 指的是您的工作站,这是流量返回的地方。与“natbox”上端口 5555 的连接将通过隧道返回到您的工作站,并尝试连接到您的本地端口 6000。

natbox $

所以现在我们登录到 natbox,隧道已经建了一半。

natbox $ ssh -R 127.0.0.1:6000:127.0.0.1:5555 databox

这会与“databox”建立一个 SSH 连接,在该连接中它会在该服务器的端口 6000 上打开一个监听套接字,该端口绑定到回送地址。到达该端口的连接将通过 ssh 连接发送回“natbox”,在那里他们将尝试连接到 natbox 的端口 5555...服务器。

databox $ export DISPLAY=:0.0
databox $

完成。

在“databox”上运行的任何 X 客户端程序都将尝试连接到本地计算机在端口 6000 上的显示“0”...这最终会回到您的控制台。

databox $ xterm

这应该会在本地显示器上从“数据框”打开一个终端窗口。您不需要它,但它可能会更容易验证和排除 X 设置故障,而无需将 Oracle 组件拖入其中。


注意,ssh -R 选项上对 127.0.0.1 的第一次引用(以及它和第一个端口号之间的 :)实际上是隐含的,但我将它们包括在内,因为它似乎不太违反直觉我。也可以通过在中间机器上提供“执行命令”作为本地机器上“ssh”的最终参数,在单个命令行上进行级联设置,只要添加@987654328 @ 到第一个 ssh 以便它知道你想要一个端到端的 tty ......但它已经足够复杂了,所以我没有包括它。

【讨论】:

我接受这个答案,因为它是一个彻底、准确且写得很好的答案。但是,我能够采用我认为更简单的方法。在我的本地机器上适当地设置DISPLAY 变量,我运行xhost + <NAT IP>。然后,ssh -X <linux server>(通过我的.ssh/config 中的 NAT 代理)。我可以通过以 root 身份运行 xclock 来确保它正常工作。我以为我很清楚,但 X 在./runInstaller 期间抱怨身份验证错误为oracle。然后我将适当的 .Xauthority 添加到 oracle 帐户,一切都很好。

以上是关于X 通过 NAT 转发的主要内容,如果未能解决你的问题,请参考以下文章

iptables nat 技术转发

Linux环境下非root用户通过防火墙nat将端口转发到8080端口

iptables转发技术(NAT)

iptables nat表转发

iptables转发技术

两端机配置nat转发