月度归档:2020年03月

VNet隧道一键安装脚本,一键安装转发流量

因为自己也会经常安装,所以干脆写一下脚本。节省了很多工作量
本人能力有限,脚本只基于CentOS7 x64系统

执行一键脚本

yum -y install wget
wget -N --no-check-certificate "https://txt.yuwai.xyz/wp-content/uploads/2020/03/vnet.sh";chmod +x vnet.sh;./vnet.sh
微信截图_20200228210300.png

支持控制端(国内NAT和非NAT机器)的安装

支持服务端(国外机器)的安装

脚本比较简单,但可以明显提示安装效率。

目前1.2.3功能可用,其他的还在咕咕咕。

如果你安装好后不会配置或想要手动安装,可以查看:VNet-Tunnel隧道传输SSR流量安装教程

最详细的VNet-Tunnel隧道传输流量安装教程-WS协议隧道

本文介绍Vnet隧道使用方案

1143362.jpg

隧道简介

隧道是将两台服务器相连,加密传输数据。一个机器接收到流量加密成隧道流量发送给另一个,另一个机器接收隧道流量再解密之后发送到你指定的地址和端口,通过隧道流量过墙。

比如用SS-r,端口和地址填a服务器的隧道接收端口和地址,a接收到流量加密一下发送给b服务器,b解密之后在把流量发到你的Ss-r服务器,等于b服务器代替你发送Ss-r流量。一般来说a在国内,b在国外。Ss-r服务器和b可以在一个服务器。

声明:本教程基于Centos7,程序加密,具体安全性未知,后门情况未知。

文件下载地址:tunnel.zip
附带的说明文档:vnet.pdf

接收端设置

接收端叫server端,也就是服务端,通常是国外服务器,负责接收隧道流量然后解密并转发。

连接上VPS,首先我们确保服务器安装有zip和unzip,执行安装命令

yum -y install zip unzip

下载文件,然后解压缩,之后再赋予执行权限

wget -N --no-check-certificate "https://txt.yuwai.xyz/wp-content/uploads/2020/03/tunnel.zip" && unzip tunnel.zip && chmod -R +x ./*

然后让程序后台运行

nohup ./server >> /dev/null 2>&1 &

此时建立一个web服务,在浏览器访问VPS的IP的8081端口的地址,比如:

服务器IP:8081/resources/add_server.html

会打开一个界面,点击添加按钮填写配置

222.png

如果打不开界面,可能是防火墙问题,请到文章底部查看防火墙设置

第一个远端地址填写的是监听地址,默认的不用管。端口示例12345,此端口任意,需与发送端对应

然后下面那个填写转发地址,就是接收到隧道流量解密之后发送到哪里。比如这个VPS本身搭建了一个8090端口的Ss-r,就转发到本地IP127.0.0.1的8090端口。(文章结尾会附上docker写法)

发送端设置

发送端叫做client,也就是客户端,通常是国内机,负责接收流量然后加密成隧道流量发送给服务端。

同样的,连接上VPS首先我们确保安装有zip和unzip

yum -y install zip unzip

然后下载文件,然后解压缩,之后再赋予执行权限,

wget -N --no-check-certificate "https://txt.yuwai.xyz/wp-content/uploads/2020/03/tunnel.zip" && unzip tunnel.zip && chmod -R +x ./*

然后后台运行client

nohup ./client >> /dev/null 2>&1 &

此时web访问网址,注意是8080

服务器IP:8080/resources/add_client.html

添加配置

111.png

同样如果打不开页面请cha’k后面的防火墙设置

如图,主要修改本地配置的端口号,比如图中就是11080。代表国内鸡使用端口

然后是远端配置,这个地方填写接收隧道流量vps的IP地址,端口随意但需要与接收端相同,这里就填12345然后保存。

此时两个机器直接的隧道就建立起来了,此时大体流程就是你把流量发送到client端的12345端口,然后client通过隧道把流量发到server端,server端接收到隧道流量,还原成你发送的流量再发送到上图中指定的IP地址127.0.0.1的8090端口。隧道不是代理,只是提供流量传输。

CentOS7防火墙设置

首先关闭防火墙

systemctl stop firewalld
systemctl mask firewalld

然后启用iptables

yum install -y iptables
yum install iptables-services -y

设置规则

iptables -F
iptables -P INPUT ACCEPT
iptables -X

NAT机发送端设置

NAT机共享IP,端口也不是独占所有,所以需要端口映射。

一般NAT机端口问题很好解决,一些主机上面板就能直接管理端口映射,所以此处就仅说一下直通端口的映射,也就是开出来机器,主机商直接给你固定的一些端口,这些端口和你的NAT机是直通的。

映射很简单,此处使用防火墙firewall来实现。可以参考我之前发布的firewall教程。

此处比如用22222的直通端口来实现访问8080端口的效果。

首先机器要有firewall并且开启,然后开启路由转发

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

生效路由转发

sysctl -p

开启流量伪装

firewall-cmd --zone=public --permanent --add-masquerade

开放端口

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=22222/tcp --permanent

然后把22222端口流量转发到8080端口

firewall-cmd --add-forward-port=port=22222:proto=tcp:toaddr=192.168.1.136:toport=8080 --permanent

此处的192.168.1.136是NAT的内网IP地址,NAT都会有这个。

然后重新加载防火墙配置

firewall-cmd --reload

此时我们访问22222端口,firewall会把流量发到8080端口,所以访问22222端口等同于访问8080端口。

SSPANEL前端设置

请确保已经安装好单端口承载和偏移

333.png

端口偏移至发送机端口,如文章示例的11080,如果承载端口是80。则填写在描述页或地址页#11000

Docker SSR后端配置

以示例的8090端口,承载80为数据

docker run -d --name=容器名称 -e NODE_ID=节点ID -e API_INTERFACE=modwebapi -e WEBAPI_URL=节点地址 -eSPEEDTEST=0 -e WEBAPI_TOKEN==对接密钥 --log-opt max-size=50m --log-opt max-file=3 -p 80900:80/tcp -p 8090:80/udp --restart=always stone0906/ssrmuv2

此部分可查看通过Docker部署端口偏移详解,如果启动失败,请重启服务器再运行

安全部分

细心的小伙伴可能发现了,访问发送端和接收端是无需验证的。这也就意味着只要知道我们的IP谁都可以访问。

我们可以在设置完成后通过关闭端口的方式保证安全。

接收端(国外)关闭8081

iptables -A INPUT -p tcp --dport 8081 -j DROP

发送端(国内)关闭8080

iptables -A INPUT -p tcp --dport 8080 -j DROP

如果国内用的NAT,则关闭对应端口,比如11080

iptables -A INPUT -p tcp --dport 11080 -j DROP

如果要启用端口,在两台服务器上均执行清除规则命令

iptables -F

备注

无论发送端还是接收端,服务器重启后均会丢失数据。
意味着每次我们重启服务器都需要重新启动服务
发送端(国内)

nohup ./client >> /dev/null 2>&1 &

接收端(国外)

nohup ./server >> /dev/null 2>&1 &

且每次重启都需要重新添加规则,所以,尽量不要重启服务器。

如果不会手动安装,可以选择一键安装脚本VNet隧道一键安装脚本

感谢名单

本文部分内容(NAT部分)引用Yi博客(https://evlan.cc/archives/vnet-tunnel.html)
安装部分引用原文作者徐嫦曦(https://github.com/rc452860)
服务器防火墙部分引用小黑:(https://t.me/xiaohei2333)
如果引用部分涉及侵权,请联系我们。

如何更改linux文件的拥有者及用户组(chown和chgrp)

一、基本知识

  在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户。该文件用户可以修改该文件的拥有者及用户组,当然root用户可以修改任何文件的拥有者及用户组。在Linux中,对于文件的权限(rwx),分为三部分,一部分是该文件的拥有者所拥有的权限,一部分是该文件所在用户组的用户所拥有的权限,另一部分是其他用户所拥有的权限。对于文件的权限请参考《Linux的chmod命令》

   文件(含文件夹,下同)的权限,在shell中可以通过chmod命令来完成,关于此请参考《Linux的chmod命令》。在 shell 中,可以使用chown命令来改变文件所有者及用户组,chgrp命令来改变文件所在用户组。在 Linux的C程序中,可以使用chown函数来改变文件所有者,及所在用户组。

  另外,在shell中,要修改文件当前的用户必须具有管理员root的权限。可以通过su命令切换到root用户,也可以通过sudo获得root的权限。

二、使用chown命令更改文件拥有者

在 shell 中,可以使用chown命令来改变文件所有者。chown命令是change owner(改变拥有者)的缩写。需要要注意的是,用户必须是已经存在系统中的,也就是只能改变为在 /etc/passwd这个文件中有记录的用户名称才可以。

chown命令的用途很多,还可以顺便直接修改用户组的名称。此外,如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上 -R的参数即可。

基本语法:

chown [-R] 账号名称 文件或目录

chown [-R] 账号名称:用户组名称 文件或目录

Linux创建快捷方式(链接)命令ln

在Linux Mint中好像没有用鼠标创建快捷方式的方法(或许是我没发现)。创建快捷方式可以使用ln命令
使用方法:
ln -s 源文件 目标目录
好像必须是完整的路径,不管当前在哪个目录。

ln -s /home/wwwroot/index.html /home/fff/desk

即在 /desk 创建 /index.html 的链接。
加参数-s是创建软链接,相当于Windows下的快捷方式,不加-s是硬链接,就是会复制一个副本到目标位置,但是与复制不同,两个文件,只要修改一个,另一个会跟着改变。