欢迎转载,但请在开头或结尾注明原文出处【blog.chaosjohn.com】
这是 端口转发 系列文章的第二篇,历史文章:
前言
笔者之前也过一篇文 - IPv6在虚拟机通过无线网卡桥接的网络下无法使用(VMware WorkStation)
文中背景:笔者买了一台 GK41,运行的是随机安装的 Windows 10,同时借助 VMware Workstation 运行了一台虚拟客户机 Manjaro Linux。GK41 通过 RJ45 网口接入网络,虚拟机采用 桥接 该网口的有线网卡,给客户机 Manjaro Linux 提供网络接入。至此,主机和客户机都处于同一个局域网内,且都能分配到IPv4/IPv6,此时
GK41:192.168.0.41Manjaro Linux:192.168.0.65
诉求
因为笔者不给 GK41 接显示器,但又想通过 IPv6 远程访问 Windows 10 的桌面,结合笔者之前造过 crontab + ddns6 的轮子,所以打算:
Manjaro Linux配置为开机自启Manjaro Linux上配置ddns6,通过cron定时检测并更新自身的IPv6地址到域名manjaro-gk41.example.comManjaro Linux转发自己的3389端口到Windows 10的3389端口3389端口是RDP(Remote Desktop Protocal)(微软远程桌面协议)的默认端口
发现问题
最直接的想到了 篇一 中的工具 - rinetd
然后就是 一顿操作猛如虎,试完发现不靠谱
因为 rinetd 不支持 IPv6,它只监听 IPv4地址 和转发到 IPv4地址,详见 rinetd 在其 Github 上的某 Issue - does the program support ipv6?。
老爷子回复道:可能不会支持 IPv6 了,因为这玩意自从上世纪九十年代开始,我就没怎么动过了,添加 IPv6 支持估计会很难。
解决问题
在寻找 rinetd 替代品的过程中,笔者发现了 xinetd
xinetd和rinetd都是inetd("the Internet daemon")的替代品。不过inetd最早跟随4.3BSD(1986年)推出,在如今的 主流 Linux 发行版 中都已经被弃用了;而rinetd虽然在各大包管理器中均能找到,但它的作者也说了,自从上个世纪九十年代之后就没怎么动过了;对于xinetd,虽然最后一个版本2.3.15发布于 2012年5月9日,但Github主页上最近一次更新还在2016年。
xinetd 在 2.1.8.8pre* 版本(早于2000年6月4号),就增加了 IPv6 支持,太超前太牛逼了,详见互联网档案馆 2000-08-16 快照 和 互联网档案馆 2013-06-07 快照(因官网 http://www.xinetd.org 早已不可访问,所以只能在 互联网档案馆 里找到 2000-08-16 ~ 2013-06-09 之间的网页快照)
安装
Manjaro Linux/Arch Linux1
$ sudo pacman -S xinetd
Debian/Ubuntu1
2$ sudo apt update
$ sudo apt install xinetdRHEL/CentOS1
2$ sudo yum update
$ sudo yum install xinetdFreeBSD1
2$ sudo pkg update
$ sudo pkg install xinetd
配置
配置文件默认位于 /etc/xinetd.d 目录下,且安装完会默认创建一些常用的配置(默认均为禁用状态:disable = yes)
1 | $ ls -lh /etc/xinetd.d |
针对我的诉求,创建配置文件
1 | # cat >> /etc/xinetd.d/win10-gk41 <<EOF |
该配置表示,监听本地网卡
IPv6地址的3389端口,然后转发到192.168.0.41:3389
然后重启 xinetd 生效,在 微软远程桌面 里通过访问 manjaro-gk41.example.com 即可访问到 gk41 上运行的 Windows 10。
最后,如果该文对读者有些许帮助,考虑下给点捐助鼓励一下呗😊