使用iptables来通过网线共享网络
前言
最近在计划加一台服务器,与原本的R720组成40G内网,然而路由器的网口已经不够了,心想能否直接通过40G网线来将R720的互联网共享给新机器,于是便有了这篇文章。
准备工作
- 计算机两台(一台要有双网卡
- 网线一根
- 互联网接入点一个
由于上面的我统统没有(bushi,所以这次技术验证放在了PVE中进行。
创建网桥vmbr1,无需绑定物理接口,模拟两机通过网线相连
创建两台虚拟机,名字分别为
test-network
、test-nonetwork
,配置如下(串行接口可以忽略
- 在两台机器上安装Debian 11系统
配置计算机A
Well,现在我们来配置计算机A,也就是共享网络的机器
配置IP地址
编辑/etc/network/interfaces
,添加如下内容
1 | auto ens18 |
ens18
即连接互联网的端口,ens19
即与计算机B相连的端口
从上面的内容可以得知,我们要将ens19
端口的IPv4
地址配置为172.16.0.1
,子网掩码为255.255.255.0
,默认网关为本机IP
;IPv6
地址为2001:db8::1234
,子网掩码为64
,默认网关同样为本机IP
。
配置iptables
接下来是重头戏,没有iptables,就算两机的IP正确,计算机B也无法访问互联网。
安装iptables:
1 | sudo apt install iptables |
输入以下指令:
1 | # IPv4 NAT |
这配置了网络地址转换(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 | #net.ipv4.ip_forward=1 |
分别将其取消注释,同时在文件尾部添加以下两行:
1 | net.ipv6.conf.ens18.autoconf=1 |
其中ens18
为互联网端口号,由于IPv6转发的启用会全局禁用SLAAC获取IPv6地址,这两行将重新启用在该端口上的SLAAC功能。
保存文件,重新启动计算机,计算机A的配置部分就完成了。
配置计算机B
计算机B的配置非常简单,只需要配置IP和默认网关即可
编辑/etc/network/interfaces
,添加以下内容:
1 | auto ens18 |
保存后重启计算机,就可以查看实际效果了。
测试
ifconfig
IPv4 Ping
IPv6 Ping
Speedtest
缺点
很显然,这种基于NAT的上网方式的缺点在于没有独立的IP地址。由于上游计算机无法获得IPv6前缀,本机也无法获得公网IPv6地址,对于一些需要公网IP的服务(例如BT)不是很友好。同时,NAT会降低网络性能。