我在实验室拿到了一台工作站,我需要配置和管理这台工作站与他人共享使用,然后我在工作站上安装了一个NixOSNixOS是一个基于配置的Linux系统,它的一切配置都是基于配置文件进行的。

我的需求是不借助其它物理设备,在我桌子底下仅有的一个网口为我的笔记本电脑和工作站连上实验室的网络。

工作站有两张以太网卡。现在我是按照笔记本 <-> 工作站 <-> 实验室的方式连接的。我希望工作站的网络层中某个部分起到一个类似Hub或者交换机的作用,使得两个电脑都能被外界直接访问到,而不用借助类似NAT的手段。

我发现我需要的是网桥。在两个以太网口之间建立一条网桥,然后让两台机子都能访问网络。

配置

我们可以参照一些使用brctl进行配置的教程,在网上能找到很多类似的教程,但是在nixos下需要写到配置文件中去。

NixOS的配置文件位置在 /etc/nixos/configuration.nix,但是我不太希望使用同一个配置文件,所以重新建了一个文件/etc/nixos/networking.nix,并在configuration.nix中引用了它。(原文件中的第8行)

1
2
3
4
5
6
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
# Include network setting
./networking.nix
];

networking.nix中需要参照配置文件的方式编写。

1
2
3
4
5
{ config, pkgs, ... }:

{
...
}

配置内容写在...中的位置。

如果希望在图形界面中管理网络设置,我们需要启动networkmanger服务,而且需要将当前用户添加到能控制网络的组中。在networking.nix中设置如下

1
2
networking.networkmanager.enable = true;
users.users.ciaran.extraGroups = [ "networkmanager" ];

然后我们正式开始配置网桥。首先是添加这样的一个网桥:

1
2
3
4
5
networking.bridges = {
br0 = {
interfaces = [ "enp9s0" "enp5s0" ];
};
};

我们配置了一个网桥br0,它连接了两个端口。如果参照使用brctl进行配置的教程就到此为止了。但是这样的情况是没法使用网络的。这样在我的笔记本上能访问外界网络,但是在工作站却没法做到。

我们会发现,虽然ifconfig能显示有这么一个网桥,但是没法在图形界面networkmanager对网桥进行配置。如果使用ifconfig br0 down命令,这个网桥就没法找到了。

这是因为我们只建了网桥而没有建立接口。所以我们需要显示地说明网桥的接口,配置网桥的网络,并为网桥分配IP。我们需要在配置文件networking.nix中添加这样的几行:

1
2
3
4
5
networking.defaultGateway = "a.a.a.a";
networking.interfaces.br0.ipv4.addresses = [{
address = "b.b.b.b";
prefixLength = 24;
}];

当然我们也可以使用DHCP服务:

1
networking.interfaces.br0.useDHCP = true;

这样就能达到我们的目的了,也就是两边都可以访问网络。