发布于 

使用iptables来通过网线共享网络

前言

最近在计划加一台服务器,与原本的R720组成40G内网,然而路由器的网口已经不够了,心想能否直接通过40G网线来将R720的互联网共享给新机器,于是便有了这篇文章。

准备工作

  • 计算机两台(一台要有双网卡
  • 网线一根
  • 互联网接入点一个

由于上面的我统统没有(bushi,所以这次技术验证放在了PVE中进行。

  1. 创建网桥vmbr1,无需绑定物理接口,模拟两机通过网线相连

  2. 创建两台虚拟机,名字分别为test-networktest-nonetwork ,配置如下(串行接口可以忽略

image-20230531150654332 image-20230531150731478
  1. 在两台机器上安装Debian 11系统

配置计算机A

Well,现在我们来配置计算机A,也就是共享网络的机器

配置IP地址

编辑/etc/network/interfaces ,添加如下内容

1
2
3
4
5
6
7
8
9
10
auto ens18
iface ens18 inet dhcp

allow-hotplug ens19
iface ens19 inet static
address 172.16.0.1/24
gateway 172.16.0.1
iface ens19 inet6 static
address 2001:db8::1234/64
gateway 2001:db8::1234

ens18 即连接互联网的端口,ens19 即与计算机B相连的端口

从上面的内容可以得知,我们要将ens19端口的IPv4地址配置为172.16.0.1,子网掩码为255.255.255.0,默认网关为本机IPIPv6地址为2001:db8::1234,子网掩码为64,默认网关同样为本机IP

配置iptables

接下来是重头戏,没有iptables,就算两机的IP正确,计算机B也无法访问互联网。

安装iptables:

1
sudo apt install iptables

输入以下指令:

1
2
3
4
5
6
7
8
9
# IPv4 NAT
sudo iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
sudo iptables -A FORWARD -i ens18 -o ens19 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i ens19 -o ens18 -j ACCEPT
# IPv6 NAT
sudo ip6tables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
sudo ip6tables -A FORWARD -i ens18 -o ens19 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo ip6tables -A FORWARD -i ens19 -o ens18 -j ACCEPT

这配置了网络地址转换(NAT)

保存iptables

安装iptables-persistent:

1
sudo apt-get install iptables-persistent

安装过程中会提示是否保存iptables,选择Yes即可

日后若要保存刚输入的iptables,键入sudo netfilter-persistent save即可

启用IP转发

现在让我们进行最后一步:打开IPv4和IPv6的转发

编辑/etc/sysctl.conf , 找到以下两行:

1
2
#net.ipv4.ip_forward=1
#net.ipv6.conf.all.forwarding=1

分别将其取消注释,同时在文件尾部添加以下两行:

1
2
net.ipv6.conf.ens18.autoconf=1
net.ipv6.conf.ens18.accept_ra=2

其中ens18为互联网端口号,由于IPv6转发的启用会全局禁用SLAAC获取IPv6地址,这两行将重新启用在该端口上的SLAAC功能。

保存文件,重新启动计算机,计算机A的配置部分就完成了。

配置计算机B

计算机B的配置非常简单,只需要配置IP和默认网关即可

编辑/etc/network/interfaces ,添加以下内容:

1
2
3
4
5
6
7
auto ens18
iface ens18 inet static
address 172.16.0.2/24
gateway 172.16.0.2
iface ens18 inet6 static
address 2001:db8::5678/64
gateway 2001:db8::1234

保存后重启计算机,就可以查看实际效果了。

测试

ifconfig

截屏2023-05-31 15.33.21
截屏2023-05-31 15.33.21

IPv4 Ping

截屏2023-05-31 15.32.05
截屏2023-05-31 15.32.05

IPv6 Ping

截屏2023-05-31 15.31.25
截屏2023-05-31 15.31.25

Speedtest

截屏2023-05-31 15.37.40
截屏2023-05-31 15.37.40

缺点

很显然,这种基于NAT的上网方式的缺点在于没有独立的IP地址。由于上游计算机无法获得IPv6前缀,本机也无法获得公网IPv6地址,对于一些需要公网IP的服务(例如BT)不是很友好。同时,NAT会降低网络性能。