远程使用Linux小结

这篇笔记小结一下我远程使用 Linux 的一些心得,包括:动态 DNS,路由器端口映射,远程启动物理机,远程启动 VirtualBox 虚拟机,ssh 命令行界面,ssh 端口转发,vnc、x11vnc、Gnome Vino 图形界面。

首先,简介一下文中涉及的网络环境,大家的环境跟我的不一定一样,有些环节可能有增减变化。但只要动脑筋,办法总是很多的。Linux 主机所在是移动 ADSL PPPOE 拨号动态 IP光纤线路,路由器后面。主机内还安装了 VirtualBox 虚拟机。此线路本地移动宽带内部网络可访问,移动4G网和电信网络等都不能访问,移动4G网的 udp 数据包可以到达。于是,增加一个中转 ssh、vnc(非必须)服务器,所在为移动固定光纤宽带,用一部淘汰 Android 智能手机架设在两级路由器后面。此线路应该是全网可通。Linux 主机是平时关机,用时唤醒开机,用毕关机。

因为主机在 ADSL 动态线路上,所以需要动态 DNS 解析随时更新变化了的 IP 地址,这可以使用 dnspod.cn 或 oray.com (花生壳)的服务,二者都有现成的多平台客户端。前者有开放的 API,可以自己定制客户端,需要自己的域名在 dnspod.cn 上解析;后者没有开放的 API(不过他们有个开发者平台不知有没有类似东西),可以有一定限制条件的使用他们的二级免费域名作动态域名解析。我使用的是 dnspod.cn,用他们的 API 写了一个简单的 shell 脚本,利用 curl 命令直接查询路由器并更新变化的 IP(这个应该是移动宽带内部IP)。因为 PPPOE 拨号成功后 IP 也不是频繁变化的,我把这个脚本放进手机里 gnuroot 的 Linux 里,早上、中午执行一次查询更新。

找到主机所在的移动线路 IP,因为主机是位于路由器之后的,所以要把来自外面的访问映射到那台运行 Linux 主机的相应服务端口上,这在路由器管理界面上操作。如果是通过多级路由就需要逐层从外往内映射,如我使用的那台用于中转的淘汰 Android 手机。

远程启动物理主机,需要物理主机的网卡支持并在 BIOS 中开启 WOL(Wake On Lan,即网络唤醒),还需要在主机操作系统里配置网卡启用 WOL。这样,正常关机(非完全切断电源)后,网卡就处于接受唤醒主机的状态。当它接收到来自局域网发送的 UDP 数据包后就自动启动主机了。我在 Linux 下使用 wakeonlan 命令行唤醒客户端,在Windows 下和 Android 手机用名为“Depicus Wake On LAN”的客户端。它们都可以接受来自互联网上的唤醒,再透过上面介绍的端口映射唤醒指定 MAC 地址的网卡所在的主机。这时,除了在路由器上映射端口,还得在路由器上把被唤醒主机的 IP 与主机网卡 MAC 值绑定。

远程启动物理主机里的 VirtualBox 虚拟机,可以连接物理主机里的远程桌面,在图形界面启动虚拟机。也可以完全不开启物理主机的图形界面服务,ssh 连接到主机后,vboxmanage list vms 列出全部虚拟机,vboxmanage startvm "虚拟机名称" --type headless 启动虚拟机。

远程 ssh 连接。我使用的客户端为:Linux 里 ssh 命令,Windows 里 putty ,Android 手机里 ConnectBot。路由器的端口可只开一个,UDP 映射供 WOL 使用,TCP 映射供 ssh 使用。端口不限。其它端口可以通过 ssh 客户端把本地端口转发到远程主机的相应服务端口,访问本地端口就相当于访问远程相应端口的服务了。你可以一次性同时转发多个端口。

远程连接 VNC 桌面。这里有2种 vnc 服务器,普通的 vnc 服务器如:tightvncserver,vnc4server等,这种 vnc 服务器不支持需要 3D 加速的桌面或程序,如:Gnome3、Qt Creator。在这种 vnc 服务器上,我一般都使用 xfce 桌面,比较节省网络带宽 。第二种是 x11vnc 和 Gnome 桌面自带的 vino 远程桌面,可以远程连接到当前物理桌面,支持 3D 加速的桌面和程序,我常使用 x11vnc。这里我注意到一种情况,如果物理主机没有连接物理显示器,无法成功连接 x11vnc。这时,需要配置 xorg.conf 或其片断,强制使用指定分辨率的物理显示器(startx, x11vnc):在 xorg.conf 的“Monitor” 节中添加 Option "Enable" "true",添加用 gtf 命令生成的 Modelines;在 "Screen“节中添加相应的分辨率。

ssh 中转服务器。前面说过,我的物理主机仅在移动宽带(包括动态和固定)内部可访问,移动4G网和其它网不能访问,但移动固定 IP 光纤宽带可以被我使用的其它网访问。所以在移动固定 IP 光纤宽带环境用淘汰的 Android 手机搭了一个 ssh 中转服务器。简单来说,就是在手机安装 gnuroot 运行 Debian Linux 里面的 ssh 服务器,在里面用 ssh -g -L 命令连接物理主机并转发本地端口到物理主机相应的服务端口,连接时同时添加 -g 参数是允许远端主机连接本地转发的端口。这样,我访问中转服务器上的某个端口就相当于直接访问物理主机相应端口的服务了。

上面我小结了一下自己远程使用 Linux 的一些要点,供备忘和需要的朋友参考。欢迎交流和指正,谢谢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注