基于Raspberry Pi的网关设计方案、实现

一、Raspberry Pi设备

1、关于树莓派硬件的说明:

树莓派硬件类型:3B+

cpu架构:aarch64_cortexr-a53

镜像:brcm2710

2、PC端必备软件

烧入镜像:balenaEtcher

备份、还原镜像:Win32DiskImager(该软件备份的镜像比较大,会备份整个SD卡,16GB)

远程登陆:PuTTy

传输文件:WinSCP

树莓派SD卡扩容:Linux下gparted,原始openwrt系统安装后内存为128MB。

 

3、OpenWrt系统:

3.1、Pi 3B+镜像:

下载:https://downloads.openwrt.org/snapshots/targets/brcm2708/bcm2710/

使用balenaEtcher烧入SD卡即可。此时是能够使用显示器显示pi的命令行,必须在启动pi之前接上显示器。只有在完成pi的网络配置之后,才能使用putty远程登陆。

下载镜像名为:openwrt-brcm2708-bcm2710-rpi-3-ext4-factory.img.gz

基于Raspberry Pi的网关设计方案、实现_第1张图片

3.2OpenWrt网络设置

  • 需要配置为文件:

(1)网络配置:

修改文件:/etc/config/network

web界面配置远程登陆:设定用户名、密码,用于在putty上远程登陆。配置后可使用putty远程登陆,可以上网。

(非必要)nps client(树莓派)端口开放:在web界面中设置Network> Firewall> Traffic Rules> Open ports on router

 

(2)wifi配置:

修改文件:/etc/config/wireless,配置后可连接wifi。

修改network配置:

config interface 'loopback'

       option ifname 'lo'

       option proto 'static'

       option ipaddr '127.0.0.1'

       option netmask '255.0.0.0'

config globals 'globals'

       option ula_prefix 'fdce:2e49:45c9::/48'

config interface 'lan'

       option type 'bridge'

       option proto 'static'

# 设置路由器内网的IP,也是web界面登陆地址

       option ipaddr '192.168.11.11'

       option netmask '255.255.255.0'

       option ip6assign '60'

# 广域网协议

config interface 'wan'

       option proto 'dhcp'

       option ifname 'eth0'

       option ipv6 'auto'

网络配置完成后,需要reboot或者重启网卡(/etc/init.d/network reload)。

(关机命令:kill –USR1 1

 

(3)web界面设置:

基于Raspberry Pi的网关设计方案、实现_第2张图片

(4)wireless配置:

config wifi-device 'radio0'

       option type 'mac80211'

       option channel '36'

       option hwmode '11a'

       option path 'platform/soc/3f300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'

       option htmode 'VHT80'

#启动wifi

       option disabled '0'

#配置wifi

config wifi-iface 'default_radio0'

       option device 'radio0'

       option network 'lan'

       option mode 'ap'

       option ssid 'OpenWrt_1'

       option encryption 'psk2'

       option key '123456789'

 

3.3OpenWrt镜像源设置

(1)需要配置的文件:

第三方镜像源:/etc/opkg/distfeeds.conf

默认镜像源:/etc/opkg.conf——这个可以不用修改,反正官网下载都很慢

 

(2)具体配置:

直接修改/etc/opkg/distfeeds.conf替换成中科大镜像.

src/gz openwrt_core http://mirrors.ustc.edu.cn/lede/snapshots/targets/brcm2708/bcm2710/packages

src/gz openwrt_kmods http://mirrors.ustc.edu.cn/lede/snapshots/targets/brcm2708/bcm2710/kmods/4.19.69-1-75a2a48da3e9489814ae927d97f255a8

src/gz openwrt_base http://mirrors.ustc.edu.cn/lede/snapshots/packages/aarch64_cortex-a53/base

src/gz openwrt_luci http://mirrors.ustc.edu.cn/lede/snapshots/packages/aarch64_cortex-a53/luci

src/gz openwrt_packages http://mirrors.ustc.edu.cn/lede/snapshots/packages/aarch64_cortex-a53/packages

src/gz openwrt_routing http://mirrors.ustc.edu.cn/lede/snapshots/packages/aarch64_cortex-a53/routing

src/gz openwrt_telephony http://mirrors.ustc.edu.cn/lede/snapshots/packages/aarch64_cortex-a53/telephony

 

3.4OpenWrt开发环境搭建:必备软件安装

(1)查看安装的软件,命令:opkg list-installed

python用于后期编写脚本

命令:

opkg update

opkg install python3

opkg install python-pip

 

(2)vsftpd 服务器:PC使用WinSCP给树莓派传输文件。

命令:

opkg install vsftpd openssh-sftp-server

/etc/init.d/vsftpd enable

/etc/init.d/vsftpd start

WinSCP登陆界面配置:

基于Raspberry Pi的网关设计方案、实现_第3张图片

 

(3)redsocks代理这个在后面会详细说明,这里还有一些必备软件库没装。

命令:

opkg install redsocks

 (注意:安装redsocks2行不通,在brcm2710版本的镜像不存在redsocks2)

 

二、nps服务器搭建与配置

1、nps:服务器配置、搭建

(1)nps使用参考网址:https://github.com/cnlh/nps

(2)nps release版本下载网址:https://github.com/cnlh/nps/releases

(3)nps直接使用release安装,由于使用git下载太慢。

(4)npsLinuxOpenWrt上运行的版本不同:

树莓派:使用linux_arm64

Linux:使用linux_amd64

 

2、启动:

使用WinSCP将nps的server程序上传到阿里云的ubuntu,进入nps server文件夹,使用chmod增加nps的执行权限。

命令:./nps start

 

3、配置云服务器的端口:

这里配置的云服务器端口是:阿里云平台的ubuntu,不是nps服务端的代码。

目的:开启相应的nps服务器需要的端口。需要开启的端口如下:

(1)nps web:8080

(2)nps client:8284

(3)socket5代理端口:8888、9999

下面给出阿里云搭载的unbutu开启端口流程:实例->更多->网络和安全组->安全组配置

3.1、配置的流程:

基于Raspberry Pi的网关设计方案、实现_第4张图片

 

3.2最终配置结果:

基于Raspberry Pi的网关设计方案、实现_第5张图片

 

4、nps:客户端配置、启用

4.1配置:

(1)在nps的web端配置客户端的密钥

(2)在nps的web端启用socket5代理:

基于Raspberry Pi的网关设计方案、实现_第6张图片

注意:需要在云端服务器上开启端口:8888、9999,给nps client的socket5提供端口)

 

(3)启动nps客户端:(在树莓派上操作,nps客户端为:linux_arm64_client.tar.gz

先进入客户端的文件夹,使用chmod 给npc赋予执行权限(命令:chmod +x npc)

命令:./npc –server=服务器IP:8284 –vkey=密钥

(注意:这里的端口一定是8284,与云端服务器开放的client端口一致,使用命令ps,查看后台进程)

 

三、redsocks代理

1、redsocks全局代理:不使用proxychains代理(这是局部代理)

树莓派必备软件:autoconf 、automake 、libtool 、libevent-dev、 g++(这些软件,在手动安装redsocks时,才需要自己安装,使用自动安装则不许需要

 

1.1、redsocks安装、配置、启动

安装:使用中科大镜像源:先更新软件列表opkg update

命令:opkg install redsocks

注意:安装redsocks之后,redsocks的启动文件位置在:/usr/sbin/redsocks,这里和Linux下的redsocks存放位置不同。

 

1.2、配置:需要配置redsock文件、防火墙设置(自定义规则)

redsocks代理的配置文件:/etc/redsocks.conf

目前只配置redsocks这是socket5代理,不需要配置redudp。

base {

//不开启日志

log_debug = off;

log_info = on;

log = "syslog:local7";

daemon = on;

redirector = iptables;

}

redsocks {

//pi的本地IP:使用ifconfig,获取eth0网卡的IP即可(这一步是错的)。

//这里使用0.0.0.0  表示:监听所有的接口,这个值默认为127.0.0.1(这个值也可以)

//开放端口12345:不需要手动配置

local_ip = 0.0.0.0;

local_port = 12345;

//nps服务器IP,需要在socket5代理中,配置相应端口:9999,这个客户端的pi在内网

ip = 服务器IP;

port = 端口;

//代理类型为socket5

type = socks5;

}

 

1.3、配置防火墙(自定义规则):

确保所有外部连接wifi的设备,所有传输数据均能够通过pi,访问到nps的socket5代理。这里需要设置防火墙开放端口、传输协议、代理哪些网段传输的数据。(不需要在pi的web界面配置防火墙的端口

(1)安装iptables

命令:

opkg install iptables

 

(2)使用iptables设置防火墙:

命令:

iptables -t nat -N REDSOCKS

# PREROUTING:重定向的名单,走redsocks代理

iptables -t nat -A PREROUTING -i br-lan -p tcp -j REDSOCKS

iptables -t nat -A PREROUTING -i br-lan -p udp -j REDSOCKS

# REDSOCKS:不重定向名单,不走redsocks代理

iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN

# 此处的192.168.8.101/24,是web界面中获取的IP,这个IP会变化

iptables -t nat -A REDSOCKS -d 192.168.8.101/24 -j RETURN

iptables -t nat -A REDSOCKS -d 10.8.0.0/16 -j RETURN

iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN

iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

# Redirect all kinds of traffic

#设置pi上的转发端口12345,不需要手动开启,和redsocks.conf中配置的端口一样

iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

iptables -t nat -A REDSOCKS -p udp -j REDIRECT --to-ports 12345

 

(3)启动:

(需要使用ps提前看看redsocks是否启动,若重复启动则无法重复启动

错误:1571024202.303121 err redsocks.c:1390 redsocks_init_instance(...) bind: Address in use

成功启动时,没有任何提示

命令:/usr/sbin/redsocks -c /etc/redsocks.conf

使用命令ps,查看是否启动成功:

 

四、完成:

至此,完成pi上的socket5代理设置,已经可以使用。将PC连接pi的wifi,之后就可以使用工程助手,实现远程登陆内网PLC。

 

 

五、扩展

  1. npc自动连接nps服务器:nps客户端自动连接nps服务器
  2. 云端的nps服务器开机自启动
  3. redsocks开机自启动
  4. 防火墙自动配置:iptable自动设置
  5. 自动安装OpenWrt开机必备软件

 

六、问题

  1. 关于nps丢包、传输速度慢的问题?

丢包:TCP隧道中,存在丢包现象。Socket5代理不存在丢包现象。

传输速度慢:(推测)可能是租借的服务器带宽小的问题——因为租借的是学生服务器,后期可以用其他带宽大的服务器来测试传输速度的问题。

 

七、个人微信公众号

欢迎各位关注个人微信公众号(都市扫地僧),CSDN登陆较少。

基于Raspberry Pi的网关设计方案、实现_第7张图片

 

你可能感兴趣的:(网关,raspberry,pi)