我有两台台式机,Windows 10 和 Debian 11。这两台机器的主板上都有单个 1G 以太网端口以及华硕 10G PCI-e 附加卡。
我没有 10G 交换机来连接这些机器,但我希望能够在它们之间建立 10G 连接以用于远程桌面。
有几种可能的方法可以解决这个问题
- 从 Windows 10 到 Debian 11 共享互联网连接
- 在两台机器之间建立静态连接,但保留 1G 连接用于互联网访问(三角配置)
- 从 Debian 11 到 Windows 10 共享互联网连接
我尝试了前两种方法,但都失败了。我不太了解 Windows 的工作原理,所以我无法诊断/找出第一种方法不起作用的原因。
第二种方法我以前也试过,但效果似乎不太好,而且似乎不太稳定。它可能这周有效,下周就无效了。我一直不知道为什么会发生这种情况。
我认为最后一种方法最有可能奏效。那就是
Windows 10 -> Debian 11 -> Network
到目前为止我已经做了以下事情:
sudo apt install dnsmasq
vim /etc/dnsmasq.conf
interface=enp4s0
listen-address=127.0.0.1
dhcp-range=192.168.10.50,192.168.10.150,24h
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo apt install iptables-persistent
我做到了不是更改内容,/etc/iptables/rules.v4
因为它自动配置了一些东西:
# Generated by iptables-save v1.8.7 on Sat Apr 9 11:27:33 2022
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
# Completed on Sat Apr 9 11:27:33 2022
# Generated by iptables-save v1.8.7 on Sat Apr 9 11:27:33 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -o enp4s0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Sat Apr 9 11:27:33 2022
我遇到的第一个问题是,我不知道我是否遗漏了 iptables 配置中的某些内容。作为参考,我遵循了此指导。
- 我其实不确定是否需要安装 iptables。它是一个防火墙“东西”,但如果我记得正确的话,我相信它是必要的,否则默认的内核行为是“阻止所有不是发往本地机器的东西”——我认为即使内核设置为使用 转发 ip 数据包,这种情况仍然适用
net.ipv4.ip_forward=1
。
如果我对此有误解或者我的信息过时了,请纠正我。
我的第二个问题是,考虑到这是一台带有 GUI 的台式机(Xfce 桌面环境),我不知道设置会有什么不同。它附带网络管理器,可以通过它为适配器配置静态 IP 地址。上面链接的指导没有提到有关为适配器设置静态 IP 的任何信息enp4s0
,该 IP 被配置为 dnsmasq 将用于监听 DHCP 请求的适配器。
然而,它肯定需要配置一个静态 IP,否则其他机器如何能够与该接口建立以太网连接?
在这种情况下,我可以使用网络管理器配置静态 IP,但是我不知道运行 Xfce 桌面环境会以何种方式干扰配置的其他部分。(也许我担心的是一些不是问题的事情?)
答案1
我做了两件事来使其工作,虽然对于第二件事我不明白为什么我所做的会起作用。
- 使用网络管理器设置静态 IP 配置。未定义路由。其他均为默认设置。
- 这是我的 iptables 规则.v4。(删除了注释和不相关的 docker 行)
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i enp4s0 -j ACCEPT
-A FORWARD -i enp4s0 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o enp0s31f6 -j MASQUERADE
COMMIT
似乎使这项工作取得成功的主要变化是添加了-A INPUT -i enp4s0 -j ACCEPT
。
我不知道为什么这样做有效。enp4s0
是 10G 网络适配器的接口。这台机器不应该接受此接口上的流量,它应该转发(如果直接连接到此主机,例如通过远程桌面或 ssh,那么我可以理解为什么添加到链中INPUT
会有所不同,但我不明白为什么添加到INPUT
链中会对所连接机器的 ping 能力产生任何影响8.8.8.8
,例如。)
关于工作原理,我肯定有些地方不明白iptables
。如果你知道答案,请评论。