如何将 Debian 11 台式电脑(带 GUI 的计算机)配置为路由器(互联网共享)

如何将 Debian 11 台式电脑(带 GUI 的计算机)配置为路由器(互联网共享)

我有两台台式机,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

我做了两件事来使其工作,虽然对于第二件事我不明白为什么我所做的会起作用。

  1. 使用网络管理器设置静态 IP 配置。未定义路由。其他均为默认设置。

网络管理器

  1. 这是我的 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。如果你知道答案,请评论。

相关内容