放弃openwrt改用ubuntu系统吧!ubuntu当内网穿透服务器更省事

浩宇看科技 2025-02-19 21:59:09

前段时间我把我的路由器从m910x软路由迁移到了BPI-R4硬路由。考虑到稳定性,路由只干路由的活。所以原本在软路由上使用的内网穿透软件就不能在继续部署在硬路由上了。那么原本部署在拨号软路由上的nps客户端就得找个新的地方安家。

我的内网穿透服务部署在另外一个openwt系统中,其中的nps客户端已经连接了另外一个服务器,因此需要docker方式在安装了一nps客户端。我的这个openwrt系统是精简版不带docker插件,需要另外自行安装。但在安装过程中遇到了一个非常蛋疼的问题,openwrt内核模块的哈希依赖错误,如果没有源码基本意味着这个openwrt镜像的扩展性就废了,恰好我没有这个镜像的源码!所以docker插件是安装不上去了的。

当然还是有解决办法的。一,在另外一个linux系统中安装docker版本的nps客户端。二,换一个带docker的openwrt镜像。我选择第三种,去XX的哈希依赖!放弃openwrt改ubuntu系统了,改用正经的linux发行版能少一堆破事。

buntu这种发行版linux系统做一个简单内网穿透服务器是没什么问题的,相比较于openwrt就是缺少直观的图形操作,大部份时候得命令行和配置文件的操作模式。

穿透组网方面我使用的是wireguard虚拟组网工具。他是一个点对点的虚拟网络工具,比一些p2p,卫星服务器转发流量的工具要稳定很多,上手难度也适中。比较难的大概是wireguard配置文件的书写。

在终端中使用下面的命令安装wireguard工具,并顺手安装一个vim工具,方便后续使用。

sudo apt-get updatesudo apt install wireguardsudo apt install vim

在终端中输入下面命令

sudo wg

如果没有任何输出代表wireguard安装成功,但没有启动wireguard的虚拟网络。如果有以下输出代表有启动的隧道。比如下图可以看到启动了wg0的虚拟网络,同时这个虚拟网络的网卡也叫wg0。

接下来配置wireguard的配置文件,因为权限问题任何命令都的+sudo,索性直接切换到root账户操作,通过一下命令切换root账户

sudo -i

进入etc/wireguard目录

cd etc/wireguard

用下面的命令生成一组ubuntu服务器使用的密钥对

wg genkey | tee /etc/wireguard/ub_privatekey | wg pubkey | tee /etc/wireguard/ub_publickey

用同样的方式生产一组客户端使用的密钥多,比如下面的两条命令生成了小米13pro和iphone 12mini用的密钥对。

wg genkey | tee /etc/wireguard/m13p_privatekey | wg pubkey | tee /etc/wireguard/m13p_publickeywg genkey | tee /etc/wireguard/12mini_privatekey | wg pubkey | tee /etc/wireguard/12min_publickey

输入以下命令创建一个名为wg0.conf的wireguard配置文件

vim wg0.conf

配置文件的参考格式如下,首先是接口部分的配置文件

[Interface]Address = 10.0.0.1/24SaveConfig = trueListenPort = 51820PrivateKey = SERVER_PRIVATE_KEYPostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADEPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

wg0.conf 文件中的以上术语定义如下:

Address –wg0接口的v4或v6 IP地址的逗号分隔列表。使用专用于私有网络的范围内的IP(10.0.0.0/8、172.16.0.0/12或192.168.0.0/16)。ListenPort – WireGuard接受传入连接的端口。PrivateKey –wg genkey命令生成的私钥。(是刚才生成的ubuntu密钥对中的私钥匙,通过下面的命令可以查看)cat ub_privatekeySaveConfig –设置为true时,关闭时接口的当前状态保存到配置文件中。PostUp –在启动界面之前执行的命令或脚本。在此示例中,我们使用iptables启用伪装。这将允许流量离开服务器,从而使客户端可以访问Internet。注意这里的“ens3”不能照抄,通过ifconfig命令查看自己的网卡名后替换过去。比如我的网卡叫“ens160”sudo apt-get updatesudo apt install net-toolsifconfig

PostDown –在关闭接口之前执行的命令或脚本。接口关闭后,iptables规则将被删除。

配置文件参考格式,节点部分

[Peer]PublicKey = CLIENT_PUBLIC_KEYAllowedIPs = 10.0.0.10/32, 10.10.100.0/24Endpoint = 1.1.1.1:1111PrivateKey: –wg genkey命令生成私钥匙。(是刚才生成的小米13pro密钥对中的公钥匙,通过下面的命令可以查看)AllowedIPs :允许通过目的ip地址,相当于路由规则。其中第一个必须填写,10.0.0.10/32是小米13pro这个节点在虚拟网络中的ip地址。后面的10.10.100.0/24可以理解为路由规则,可以小米13pro这个节点网络这个网络。AllowedIPs配置不能和其他节点的AllowedIPs冲突。Endpoint:对端,对方节点的地址和监听端口。

wg配置文件中,每添加一个节点都要单独在配置文件中添加一个[Peer]。一个[Peer]同时只能一个设备在线,只能一对一。

使用下面命令启动wg0配置文件

wg-quick up wg0

使用下面命令可以关闭wg0配置文件

wg-quick down wg0

使用下面的命令配置wg0开机自启动

 systemctl enable wg-quick@wg0

可以通过书写多个配置文件,创建多个虚拟网络,但需要注意ip地址不要冲突。

打开ubuntu的ipv4转发功能,默认情况下是关闭的。使用下面命令查看ipv4转发功能是否打开,输出0位关闭,1为打开。

sysctl net.ipv4.ip_forward

此时ipv4转发打开

编辑/etc/sysctl.conf文件在文件末尾添加net.ipv4.ip_forward = 1,保存推出。使用下面的两个命令中的一个,使配置生效。

sysctl -p /etc/sysctl.conf/etc/init.d/procps restart

使用阿里云官方的安装脚本一键安装docker,启动docker,配置docker开机启动

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyunsystemctl start dockersystemctl enable docker

拉取npc的docker镜像,PS:本次的nps服务端和npc客户端使用的“yisier1”的修改版,与原版不兼容。原版存在未修复漏洞,所以本次使用yisier1版本。

docker pull yisier1/npc

启动npc容器,想连接几个服务器都行,改一下容器名就好了。

docker run -d --restart=always --name "你的容器名称" --net=host yisier1/npc -server="你的服务器地址" -vkey="你的唯一密钥"

以上,穿透服务器上的教程完结。

我的内网穿透思路,云服务器上的nps接受并通过tcp隧道转发wireguard流量到ubuntu穿透服务器上的npc,npc转发流量给wireguard。

为什么要这么做,我的宽带没有公网ipv4,当然可以申请但是得加钱,100块钱一个月还是动态ipv4。wireguard对ddns支持不好,虽然说支持解析但后续不会更新,除非手动重启接口,ip发生改变时就会断联。所以我购买了一个轻量云服务器,深圳机房固定ip,每月流量200G,30mbps带宽,年付300。比每月加100拿动态公网ipv4强。

下面是手机端wiregura配置

看图即可

附加1:编译符合哈希要求的openwrt内核模块的方法

ssh连接到openwrt,输入命令获取当前内核的哈希值

opkg info kernel

在编译固件时,在编译命令补充这个命令既可以编译指定哈希值的插件“LINUX_VERMAGIC:=64ef87412604991da1634f04cf9d69af”,比如

make -j4 V=s LINUX_VERMAGIC:=64ef87412604991da1634f04cf9d69af
0 阅读:0
浩宇看科技

浩宇看科技

感谢大家的关注