把树莓派改造成NAT软路由器

您所在的位置:网站首页 树莓派4B刷OpenWRT软路由做dhcp 把树莓派改造成NAT软路由器

把树莓派改造成NAT软路由器

2023-07-27 06:18| 来源: 网络整理| 查看: 265

本文目录 1、查看网卡情况2、配置WAN口静态ip和LAN口上的DHCP server3、配置IP转发和SNAT功能3.1、开启Linux的报文转发功能 3.2、开启SNAT功能3.3、测试网速4、进阶配置4.1、如果WAN口(上行接口)eth0是动态分配的IP地址4.2、在LAN口上,给下游主机开启自动分配IP地址功能4.3、永久保存iptables, SNAT配置,并设置成开机自动启动4.4、其它

根据Linux NAT软路由的简介、入门与配置这个文章,我们已经知道了如何将一台Linux主机改造成一台NAT软路由。树莓派预装了raspberry pi OS是Debian Linux的一个衍生版本,加上树莓派的低待机功耗,刚好合适用来作一个NAT软路由。 这里我们以“树梅派zero w + 一块带二个网卡的底板” 构成的硬件为例来说明如何将树莓派配置成NAT软路由。 在这里插入图片描述 首先登录系统后,我们可以看到这台树莓派带二个有线网卡eth0,eth1和一个无线网卡wlan0,这里我们不使用wlan0无线网卡,只使用有线网卡eth0, eth1。构建如下图的一个NAT软路由器。

eth0 做为上行的WAN口eth1 做为下行的LAN口,接下游交换机或者直接连接下游的主机 +- RPi -------+ | eth0 | +---+ 192.168.3.66| +- Laptop ----+ | | eth1 +----------+ eth0 | | | 10.0.0.1 | | 10.0.0.2 | | +-------------+ +-------------+ +- Router ----+ | | Firewall | | +- PC#2 ------+ (Internet)---WAN-+ DHCP server +-LAN-+---+ 192.168.3.11| | 192.168.3.1 | | +-------------+ +-------------+ | | +- PC#1 ------+ +---+ 192.168.3.22| +-------------+ 1、查看网卡情况 xxx@raspberrypi:~ $ ifconfig eth0: flags=4163 mtu 1500 inet 192.168.3.66 netmask 255.255.255.0 broadcast 192.168.3.255 inet6 fe80::6b3f:9acb:9fe7:7940 prefixlen 64 scopeid 0x20 inet6 fe80::2e0:99ff:fe62:ecb6 prefixlen 64 scopeid 0x20 ether 00:e0:99:62:ec:b6 txqueuelen 1000 (Ethernet) RX packets 8289 bytes 958968 (936.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 451 bytes 48838 (47.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4099 mtu 1500 ether 00:e0:99:63:19:61 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 12 bytes 1722 (1.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 1722 (1.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan0: flags=4099 mtu 1500 ether b8:27:eb:c7:e1:1e txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 2、配置WAN口静态ip和LAN口上的DHCP server

见:树莓派配置静态IP地址,或者禁止掉网卡通过DHCP申请IP地址,简单起见,把上行的WAN口的网卡eth0配置成固定IP地址(请参照上述文章中的systemd-networkd的方式来配置),在下行的LAN口eth1上配置dhcp server自动给下游主机分配网络的功能(见本文4.2章节)。

3、配置IP转发和SNAT功能 3.1、开启Linux的报文转发功能

打开配置文件 sysctl.conf

sudo vi /etc/sysctl.conf

找到net.ipv4.ip_forward这一行,去掉最前面的#号,打开IPv4转发功能(默认情况下每个网卡只接收发给自己这个网卡的ip地址的报文,即使目标地址为本网卡IP地址的报文,其它目标地址的报文都丢弃,打开后这个选项后,Linux会收到源IP地址不是自己网卡IP地址的报文,并交给内核做IP转发)。

# Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1 3.2、开启SNAT功能

这个很简单,一句命令:这样就开启了NAT路由器功能,构成了如上图所示的网络。

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to 192.168.3.66

然后我们在下游主机10.0.0.2打开浏览器,就可以发现可以打开csdn.net了。

用以下命令可以看到nat table的POSTROUTING chain里已经增加了一条开启了SNAT功能的规则。

xxx@raspberrypi:~ $ sudo iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 10.0.0.0/24 anywhere to:192.168.3.66 3.3、测试网速

如下图我们可以看到下行最大大约可以达到45Mbps,达不到网卡的限速100Mbps,此时我们发现树莓派zero w的CPU占用率已经达到了100%,所以受限于CPU处理能力,只能达到这个速度了,如果要更快的速度就要更换更快的CPU的型号。可见SNAT还是很耗费CPU资源的。 在这里插入图片描述

4、进阶配置

上述说明就完成了配置,但实际使用过程中还有很多问题,比如我们要给LAN口上的下游主机开启DHCP自动分配IP的功能,我们上行的WAN口是通过DHCP自动分配 IP的,而不是固定IP的,比如开机后iptables规则就丢失了,怎么保存下来,并在开机时自动配置好等等。

4.1、如果WAN口(上行接口)eth0是动态分配的IP地址

可以使用IP MASQUERADE(IP伪装)功能代替SNAT功能则可以。用命令

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

代替上述的

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to 192.168.3.66 4.2、在LAN口上,给下游主机开启自动分配IP地址功能 安装软件包dnsmasq sudo apt install dnsmasq

配置dnsmasq 前面安装的dnsmasq提供了DHCP和DNS服务, 默认的配置文件模板很大,但我们其实只需要其中很小的功能,所以这里我们选择从空文件开始添加配置,这样还更容易一些。

备份原始的配置模板文件,并新建一个空的配置文件:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig sudo vi /etc/dnsmasq.conf

写入以下配置:

interface=eth1 # Listening interface dhcp-range=10.0.0.2,10.0.0.10,255.255.255.0,24h # Pool of IP addresses served via DHCP domain=eth1 # Local DNS domain address=/gw.eth1/10.0.0.1 # Alias for this router 重启生效 sudo reboot 4.3、永久保存iptables, SNAT配置,并设置成开机自动启动

这里有很多办法,比如将规则用iptables-save保存后,在系统启动时通过/etc/rc.local脚本起增加iptables-restore命令的自动 执行引入开机自动设置SNAT规则,或者/etc/network/interfaces脚本里加入pre-up iptables-restore命令恢复SNAT规则等,但最简单的方式还是通过iptables-persistent软件来恢复。 第一步,安装iptables-persistent软件(本质上是安装了systemd下的iptables.services):

sudo apt install iptables-persistent

安装过程中会跳出以下窗口信息告诉你ipv4, ipv6的转发规则分别被保存在/etc/iptables/rules.v4和/etc/iptables/rules.v6下。 在这里插入图片描述 第二步,重启: 只需要重启则。(注意如下你的规则有更新那么需要用以下命令将更新后的规则写入上述二个文件,然后再次重启)

sudo netfilter-persistent save 4.4、其它

待更新



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3