我目前正在尝试设置我的服务器/旧计算机,以运行多个不同的服务,每个服务都有不同的网络接口,这样我就可以通过 DDclient 将它们转发到不同的 DynDNS。但是,这需要每个虚拟接口都有一个单独的公共 IP,而我还没有弄清楚如何获得它。我尝试谷歌搜索并找到了这个文章但是这样做只会让服务器无法访问互联网,我也尝试过制作一个虚拟接口,但它没有公共 IP(如果有的话)。有没有办法做我上面描述的事情,或者我在尝试一些不可能的事情,如果不可能,还有其他选择吗?
提前致谢,Fischchen
答案1
公共 IP 地址由您的互联网提供商提供,大多数情况下您使用 DHCP 来获取公共 IP 地址。大多数 ISP 一次只提供一个 IPv4 地址。只有通过 IPv6,您才能将整个子网分配给每个接口。
您可以按照 user535733 的建议进行端口转发,您可以为您拥有的一个 IP 地址分配多个名称,这样您就可以使用例如 minecraft.mydomain.net 并将 tcp/25565 或 udp/19132 端口转发到您的 minecraft 服务器。然后,您可以使用具有完全相同 IP 地址的 passwrdmgr.mydomain.net,然后端口转发 tcp/8080 或它正在运行的任何位置。
您链接的文章是关于将两个接口桥接为一个,这将使它们充当一个以太网网络。我认为您想分离接口而不是将它们连接起来。它也适用于 archlinux 而不是 Ubuntu。
ddclient 监控接口的 IP 地址变化并将其发送给 DNS 提供商。我个人有 2 个域,并将它们都托管在 AWS Route53 上,以前我将 ddclient 与 DYNDNS 结合使用。
这里说您可以将 ddclient 与 noip 结合使用。
在文件 /etc/ddclient/ddclient.conf 中,您可以添加 2 次相同的块,但使用不同的
use=web
ssl=yesprotocol=noip
login=yourusername
password=yourpassword
minecraft.noip.com
use=web
ssl=yesprotocol=noip
login=yourusername
password=yourpassword
password.noip.com
这应该会给你 2 个指向同一 IP 地址的域名 (minecraft/password)。
由于 IPv4 只有 4 个字节长,因此存在短缺,大多数提供商只为客户提供一个地址。但 IPv6 有 16 个字节长,您可以获得具有巨大范围的自己的子网。假设您的提供商为您分配了一个地址 2001:678:5d4:123::1/64。/64 将前 64 位划分为指示您的提供商的网络部分,后 64 位可以由您分配。因此您可以将 ::1 分配给您的 minecraft 接口,将 ::2 分配给您的 vpn 等等。
Ubuntu 对如何读取 IPv6 地址有说明 https://wiki.ubuntu.com/IPv6#Reading_IPv6_Addresses
IPv6 的实施取决于你的提供商,假设你能读懂德语,这可能会有用 https://telekomhilft.telekom.de/t5/Festnetz-Internet/Richtiges-IPv6-Subnetting/td-p/5068434
在一个 IP 地址上使用两个主机名确实意味着端口转发允许混合,因此 minecraft.noip.com:80 和 password.noip.com:25565 可以工作。如果密码管理器位于 Web 服务器上,则可以将 Web 服务器配置为仅提供正确的主机名。
网络是高度分层的,主机名映射到 IP 地址,该 IP 地址绑定到可通过路由到达的接口,使用该服务的应用程序使用 udp 或 tcp 协议,这些协议可以通过防火墙和端口转发 (dnat) 到内部服务器,通过防火墙可以禁止两个区域之间的通信。您必须小心,因为这很复杂,不容易阅读。
我主要在 Docker 容器中运行我的东西,它在受限空间中运行一个应用程序,它可以与其他 Docker 容器通信,除非你将其放在单独的 Docker 网络中。Docker 将 Linux 内核分隔开来。我在一台 Ubuntu 服务器上运行多个应用程序,但如果我指定它们在自己的网络中运行,则这些应用程序彼此独立运行。
这就是我运行 minecraftserver 的方式
docker run -d -it --name mc-server -e EULA=TRUE -p 19132:19132/udp -v mc-volume:/data itzg/minecraft-bedrock-server