前言

为什么说我有特别的部署方案呢?是因为我所在的学校网络架构比较复杂,请看下面的图片

我的目标是要让我的设备可以使用工作室网络上网,且不需要认证。

我们学校使用的是锐捷认证,且一个账户最多只能登录两个设备。
而我有两个手机一个平板一个笔记本,而且还有几个虚拟机需要网络;另一个原因是我不想交网费(工作室网络可以免费用)

经过实验发现我们学校未认证的设备可以无障碍以UDP协议访问53端口,正好可以在这个端口上运行Wireguard服务。

除此之外我还想访问工作室内未经过认证的设备,比如打印机。

虚拟机系统我使用Oracle Linux,这是一个RHEL的替代品,他和RHEL完全兼容。版本: Red Hat Enterprise Linux release 8.6 (Ootpa)

开始之前,如果你需要一些小工具可以添加epel源

1
yum install epel-release -y

NAT模式的IPv4上网配置

路由配置

两个接口的ip地址和链接位置上面已经给出,他们通过服务器网口桥接到交换机上,除此之外还需要调整路由表:

NetworkManager配置大致如下(已经省略IPV6部分):

1
2
3
4
5
6
7
8
9
10
11
12
ens18: connected to ens18
"Red Hat Virtio"
ethernet (virtio_net), 50:01:BB:12:C7:E1, hw, mtu 1500
ip4 default
inet4 10.0.117.209/32
route4 default via 10.0.117.1 metric 100

ens19: connected to ens19
"Red Hat Virtio"
ethernet (virtio_net), DE:E8:DA:76:C7:D8, hw, mtu 1500
inet4 10.0.117.16/24
route4 10.0.117.0/24 metric 101

解释一下: 将ens18作为默认路由出口,并且忽略10.0.117.0/24的路由,这是因为打印机未认证流量无法经过楼层交换机。而ens19未认证却接在了工作室交换机上,因此它能够无障碍访问工作室内所有资源。此外,因为ens18需要作为wg服务器的入口,所以我将其设置成了静态ip,尽管内网已经存在DHCP服务器,但是DHCP服务器不会将已经被占用的IP分配给其他设备

内核功能配置

开启内核转发,修改/etc/sysctl.conf

1
2
3
4
net.ipv4.ip_forward=1
# 习惯性的打开bbr,我也不知道也没有用
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

wireguard配置

https://www.wireguardconfig.com/生成一份配置文件,如果你的用途和我一样,请按照下面的方式填写

  • Listen Port: 填写53
  • CIDR: 填写192.168.6.0/24,这是为了和校园网不冲突
  • Endpoint: 填写10.0.117.209:53,改成你自己的
  • DNS:随便填写一个公共DNS服务器
  • Post-Up rule: 其中有一个eth0,需要修改成ens18(能上网那个接口)

接下来安装wireguard-tools

1
yum install wireguard-tools

关闭防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

生成配置文件,并将server.conf复制到/etc/wireguard/

接下来使用wg-quick控制服务器启停

1
2
systemctl start wg-quick@server
systemctl enable wg-quick@server

查看状态

到这里IPV4的上网配置就已经结束了,将配置文件导入设备即可使用。

IPv6呢?

其实到这里本文的核心内容才开始。与大部分人的做法不同,我不想配置NAT模式的IPv6,因为我要下BT种子。所以我需要直接获得一个工作室的IPv6地址。

修改配置

以下是服务器地址设置(内网地址已省略):

1
2
3
4
ens18: 
inet6 xxxx:xxx:c00:72:114:514::/64 # 给自己一个静态ip
route6 xxxx:xxx:c00:72::/64 metric 256 # 这是楼层的子网

同时需要修改/etc/sysctl.conf

1
2
net.ipv6.conf.all.forwarding=1  # 启动流量转发
net.ipv6.conf.ens18.accept_ra = 2 # 接受来自ens18的路由器通告,不然无法上网

修改i6ptables规则,允许转发,将其改为你的可联网接口

1
ip6tables -6 -A FORWARD -i ens18 -j ACCEPT

修改wireguard配置

  • 在服务端的Address内添加一个内网地址,例如fd42:114:514::1/64
  • 在服务器对应客户端的AllowedIPs里添加一个工作室ip段内的地址,例如xxxx:xxxx:c00:72:114:514:0:2/128
  • 在客户端也添加上面的IP段内地址

至此,从你客户端流出的流量可以被正确转发到楼层交换机了,但是楼层交换机不知道如何给你响应。

转发NDP数据包

搜索了一番,这是因为没有转发NDP请求。NDP协议和IPv4的ARP作用差不多,他将IPv6地址转换为Mac地址。可以使用NDPPD来完成转发

安装NDPPD

1
yum install ndppd

修改/etc/ndppd.conf

1
2
3
4
5
6
7
8
9
10
11
route-ttl 30000

proxy ens18 { # 链接楼层路由器的接口
router yes
timeout 500
ttl 30000
rule xxx:xxx:c00:72:114:514::/96 { # 准备给WG的子网
static
}
}

接下来启动服务

1
2
systemctl start ndppd
systemctl enable ndppd

效果图

问题

这样设置相当于我的服务器占据了整个xxx:xxx:c00:72:114:514::/96,不过IPv6这么多占几个也没关系的吧~~~😀

IPv4的进阶部署方案

理论上也可以用相同的方式得到一个工作室的10.0.117.xxx作为wireguard的ip地址,但是我没试过,毕竟也是内网IP,下面是一些资料。

代理ARP: BridgeNetworkConnectionsProxyArp

代理DHCP: parprouted

性能优化

可以按照这里调整MTU

https://gist.github.com/nitred/f16850ca48c48c79bf422e90ee5b9d95