0%

VPN搭建

IP及端口检测

检测购买的vps IP是否被墙

检测IP是否被墙:站长工具或者使用ping命令。延迟太大的IP(400+ms)建议还是换一个。

检测端口在国内是否开放:在线检测域名或者ip的端口是否开放 。搭建完后可以再检查下配置的端口是否在国内开放。其他检测网址:IP可用性检测工具

检测端口在国外是否开放:you get signal 。这个其实没什么必要。

搭建ss

首先你需要一台服务器,以便在服务器上搭建ss。可以在vultr上购买一个vps,也可以在其他供应商购买。下面是基于vultr的vps搭建ss,用于Mac端fq.

在正式配置vps之前,务必先确保vps的IP及端口22没有被墙.否则下面的操作白搭.因为首先你得在墙内能够访问你的vps.

目前有两种方式搭建ss,一种是基于C的shadowsocks-libev(以下简称c-ss),一种是基于Python的Shadowsocks-Python(以下简称p-ss)。

基于C的shadowsocks-libev:(推荐)

基于Python的shadowsocks-server,目前已经不再维护,因此很容易就被q。这个是基于C的。

注意:以下安装是在centos7上的,不是这个系统或版本的不建议尝试,肯定会有不兼容的地方。另外安装的库的版本最好也别随意升级,否则也会出各种兼容问题,很浪费时间。当然如果你是高手爱折腾可以试试装在centos9上或者升级安装库版本啥的。

主要参考:

安装并配置shadowsocks-libev(yum源方式) 没了

CentOS7升级新版内核开启BBR加速最新图文教程 没了

搞懂SSR(3):Centos 7安装配置shadowsocks-libev记录—非一键脚本

怎样在 CentOS 7 上部署 Google BBR

步骤:

  1. 安装常用工具
  2. 安装编译工具gcc
  3. 安装加密库libsodium
  4. 安装tls库mbedtls
  5. 安装混淆插件 simple-obfs
  6. 安装ss (采用的是编译源码的安装方式,和其他地方的安装方式不一样)
  7. 创建账号配置文件
  8. 开放防火墙端口
  9. 开启服务
  10. 加速优化bbr

ps:有这么多步骤是因为采用的是源码编译安装的方式。

具体如下:

1.安装常用工具

1
yum install git wget vim -y

这里安装了git,wget,vim。

2.安装编译工具gcc

1
yum install epel-release gcc gettext autoconf libtool automake make asciidoc xmlto c-ares-devel libev-devel pcre-devel -y

ps:上面是一行命令。安装了很多个软件包。

3.安装加密库libsodium

1
2
3
4
5
6
7
8
export LIBSODIUM_VER=1.0.17
wget https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VER.tar.gz
tar xvf libsodium-$LIBSODIUM_VER.tar.gz
pushd libsodium-$LIBSODIUM_VER
./configure --prefix=/usr && make
sudo make install
popd
sudo ldconfig

4.安装mbedtls

1
2
3
4
5
6
7
wget https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/mbedtls-2.6.0.tar.gz
tar xvf mbedtls-2.6.0.tar.gz
pushd mbedtls-mbedtls-2.6.0
make SHARED=1 CFLAGS=-fPIC
sudo make DESTDIR=/usr install
popd
sudo ldconfig

ps:mbedtls的版本不要下最新的,否则编译的时候会报错:“错误:只允许在 C99 模式下使用‘for’循环初始化声明”。有时候解决了这里但后面安装ss的时候sudo make install一直报错。除非你有填坑的能力,否则建议还是使用2.6.0版本的。

ps:填坑网上教程。以下是网上过时的命令

1
2
3
4
5
6
7
8
export MBEDTLS_VER=2.6.0
wget https://tls.mbed.org/download/mbedtls-$MBEDTLS_VER-gpl.tgz
tar xvf mbedtls-$MBEDTLS_VER-gpl.tgz
pushd mbedtls-$MBEDTLS_VER
make SHARED=1 CFLAGS=-fPIC
sudo make DESTDIR=/usr install
popd
sudo ldconfig

这一步wget https://tls.mbed.org/download/mbedtls-$MBEDTLS_VER-gpl.tgz

1
2
[root@Tokyo6Dollor ~]# file mbedtls-2.6.0-gpl.tgz
mbedtls-2.6.0-gpl.tgz: HTML document, ASCII text, with very long lines

下载地址无效了,导致下载的其实是一个网页。后面解压缩自然失败。找了一圈资料,看到一个备用下载地址:

1
https://down.24kplus.com/linux/mbedtls/mbedtls-2.16.3-gpl.tgz

结果发现现在备用地址也不行了,建议直接去github上下载,Mbed-TLS .

5.安装混淆插件

首先安装编译必须的软件

1
yum install zlib-devel openssl-devel -y

安装 simple-obfs

1
2
3
4
5
6
git clone https://github.com/shadowsocks/simple-obfs.git
cd simple-obfs
git submodule update --init --recursive
./autogen.sh
./configure && make
make install

6.安装ss

下载源码:

1
2
3
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
git submodule update --init --recursive

编译源码并安装:

1
2
3
cd shadowsocks-libev //确保是在 ss 目录中执行编译。已经在了就不用管
./autogen.sh && ./configure && make
sudo make install

ps:sudo make install 提示。

1
2
[root@centos7-5 shadowsocks-libev]# sudo make install
make: *** 没有规则可以创建目标“install”。 停止。

mbedtls版本不对,用了最新版的v3.2.1,换回2.6.0就没问题了,这里搞了一天。

7.创建账号配置文件

1
2
mkdir -p /etc/shadowsocks-libev
vim /etc/shadowsocks-libev/config.json

输入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"server":"0.0.0.0",
"port_password":{
"port1":"pass1",
"port2":"pass2"
},
"timeout":300,
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"fast_open": true,
"workers": 5,
"plugin":"obfs-server",
"plugin_opts":"obfs=http;fast-open"
}

该替换的替换。这里是多端口的配置。

注意:上面包含了 simple-obfs 混淆插件,如果没有安装该插件,请去掉最后两行。

8.开放防火墙端口

1
2
3
firewall-cmd --permanent --zone=public --add-port=xxx/udp 
firewall-cmd --permanent --zone=public --add-port=xxx/tcp
firewall-cmd --reload

xxx为端口号,请替换为你的实际端口。

9.开启服务

通过使用创建好的配置文件来启动

单个端口号配置:

1
nohup ss-server -c /etc/shadowsocks-libev/config.json &

多个端口号配置:(上面配的是多端口,这里使用下面的命令)

1
nohup ss-manager -c /etc/shadowsocks-libev/config.json &

注意:这里并没有设置开机自启动,因此如果重启了服务器那么必须要重新启动ss服务。

c-ss多端口配置

上面看到采用源码的安装方式可以支持多端口的配置文件。

如果使用的是别人封装的脚本安装可能不支持多端口,这时可以创建多个配置文件达到多端口的效果。这里网上也有很多教程。

坑1:shadowsocks-libev的配置文件的server被我写成了127.0.0.1结果翻不了墙,外部检测端口的结果是关闭的。

正确如下,设置为0.0.0.0即可:

1
2
3
{
"server":"0.0.0.0",
}

坑2:有时候搭建完成了,ip端口也都没被q,但是就是打不开Google,或者非常慢。不太清楚什么情况。

感觉可能是shadowsocks客户端有问题,重启电脑后,可以打开Google了。还遇到一个奇葩问题,配置完后可以打开Google,但是开启bbr后就完全翻不了墙。所以现在暂时先不开起bbr了。用了一段时间后发现还是不行了,ip和端口也都没被封,不知道什么原因了。

防火墙

查看开启的端口:

firewall-cmd --list-ports

开启特定端口:

1
2
firewall-cmd --permanent --zone=public --add-port=4500/udp 
firewall-cmd --permanent --zone=public --add-port=4500/tcp

对应的删除特定端口:

1
2
firewall-cmd --permanent --zone=public --remove-port=4500/udp 
firewall-cmd --permanent --zone=public --remove-port=4500/tcp

使端口生效firewall-cmd --reload

查看防火墙状态firewall-cmd --state

启动防火墙: systemctl start firewalld.service

重启防火墙: systemctl restart firewalld.service

如果提示:

Failed to start firewalld.service: Unit is masked.

这是由于firewalld服务被锁定了.

取消firewalld的锁定: systemctl unmask firewalld.

重新锁定firewalld时执行命令: systemctl mask firewalld

参考:

CentOS7开启防火墙及特定端口

BBR加速

CentOS7安装新版内核和开启BBR加速教程_BBR2一键包

步骤:

1.升级服务器内核版本

2.安装BBR

具体如下:

1.升级服务器内核版本

1.1首先是查看当前服务器的内核版本。

1
uname -sr

BBR内核要求是4.9+,通常来说你通过上面这个命令出来的内核版本是在3.几。比如:

1
Linux 3.10.0-1160.71.1.el7.x86_64

1.2 升级

直接参考上面的链接,很详细。

2.安装BBR

要在新安装好的CentOS7上面启用新内核,只需要复制下面的代码执行就可以了。

1
2
3
echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

然后输入下面的命令查看是否开启BBR成功

1
sudo sysctl net.ipv4.tcp_available_congestion_control

成功的话应该是下面这种输出

1
net.ipv4.tcp_available_congestion_control = reno cubic bbr

iPhone翻墙

手机翻墙有两种方式:

  1. 通过在设置app里添加配置文件。这个比较复杂,这里就不介绍了。

  2. 安装专门的app,在app里填之前的配置信息,这个最简单。(推荐使用)

下面是第一种方式:

搭建IPsec/L2TP VPN

CentOS快速搭建一个属于自己的IPsec/L2TP VPN

第二种方式:

下载APP:potatso lite,需要登录美区账号下载。下载后填写配置信息即可。

基于Python的Shadowsocks-Python(不推荐,容易被封端口)

使用vultr(vps)搭建ss并开启BBR快速上网教程 超简单10分钟搞定

从零开始于Vultr上搭建属于自己的VPN服务器【CentOS7+Shadowsocks+serverspeeder加速+防坑指北】【适合新手】

p-ss多端口配置

默认情况下只会有一个端口。

多端口格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"server":"0.0.0.0",
"local_address":"127.0.0.1",
"local_port":1080,
"port_password":{
"xxx端口":"xxx密码",
"xxx端口":"xxx密码",
"xxx端口":"xxx密码"
},
"timeout":300,
"method":"aes-256-cfb",
"fast_open":false
}

最后要记得重启下shadowsocks:service shadowsocks restart

相关命令:
启动:service shadowsocks start
停止:service shadowsocks stop
重启:service shadowsocks restart
状态:service shadowsocks status

如果你的vps开启了防火墙,则还需要开启特定端口.否则可能连接不上.开启防火墙端口移步防火墙部分。

p-ss的代理端口被墙解决

解决办法:登录ssh root@<ip>,更换SS服务端口.

编辑ShadowSocks配置文件:vi /etc/shadowsocks.json 。修改端口,保存。

重启服务:ssserver -c /etc/shadowsocks.json -d restart

别忘了如果你的vps开启了防火墙,则还需要在防火墙中开启上述端口.

参考:

服务器IP能Ping通,SSH能连接,代理却连不上的说明与解决

ShadowSocks:更改SS端口号防止被墙

坑1: ssh root@<ip> 登录不上

登录不上的原因有很多。可以分别尝试下面的解决办法:

1.使用vps服务商自身提供的网页版终端登录一次,激活22端口。

2.可能是重新购买的vps和上一次的IP相同导致.需要将本地 /.ssh/known_hosts 之前的那一条记录删除掉.重启终端.

坑2:按照网上的教程步骤总是失败提示[Error] libsodium-1.0.17 install failed

发现是网上的脚本不支持centOS8,而购买vps时默认是centOS8,所以在购买时需要手动选择为centOS7.最好的办法是研究一下脚本内容,自己整.

因此,在按照教程步骤前,一定要看清楚,操作系统的版本是不是一致,否则可能会导致各种适配问题。

疑问

1. 如何查看端口在被哪个程序or进程使用?

检查端口被哪个进程占用:netstat -lnp|grep 80 #80端口,自行更换;如:8888 ,打印如下:

1
2
3
4
tcp        0      0 0.0.0.0:18388           0.0.0.0:*               LISTEN      982/python
tcp 0 0 0.0.0.0:8388 0.0.0.0:* LISTEN 911/ss-server
udp 0 0 0.0.0.0:18388 0.0.0.0:* 982/python
udp 0 0 0.0.0.0:8388 0.0.0.0:* 911/ss-server

安装:

1
yum install net-tools

2. firewall的—add-port命令是不是真的开启了一个端口?

3. 服务器开启一个端口但不绑定任何应用外部能访问到吗?

使用 firewall-cmd --zone=public --add-port=4500/udp --permanent 添加了一个端口,但外部检测却是关闭什么原因?

一个端口开启后但不绑定任何应用程序,那么对于外部来说这个端口依然是关闭的,因为检测肯定是依据某个协议来检测的,如果端口没有绑定任何应用,那自然就不会有任何回应,因此对于外部来说这个端口等同于关闭,虽然内部查看该端口其实是开启的。—个人猜测,可能是完全错误的。

4. 0.0.0.0 和 127.0.0.1的区别

彻底明白ip地址,区分localhost、127.0.0.1和0.0.0.0

5. shadowsocks是如何被检测和封锁的

【还Shadowsocks一个清白】Shadowsocks是如何被检测和封锁的,兼谈ss配置策略

觉得文章有帮助可以打赏一下哦!