警告
本文最后更新于 2021-06-27,文中内容可能已过时。
前言
- 本来是不想整理这篇内容的,gre协议在国内限制实际上已经很严格,所以现在使用也已经并不多了,虽然不多,但作为一个运维这玩意有时候又需要,很容易忘记,想了想还是记录一个。
- 以下测试在腾讯云的主机上和
aws
的lightsail
的主机上是不能拨号成功的,但在aws
的EC2
上是可以拨号成功的,很奇怪,pptp服务器日志显示的是说由于防火墙限制了gre协议包导致的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
## pptp-setup 是自动配置的工具,也可不安装该工具
$> yum install ppp pptp-setup pptpd
# 配置远程pptp连接的用户名和密码
$> vim /etc/ppp/chap-secrets
# 用户名 连接协议 密码 连接ip
<用户名> PPTPserver <密码> *
# 配置连接信息
$> vim /etc/ppp/peers/osppp
pty "pptp xxx.xxx.xxx.xxx --nolaunchpppd"
name <用户名> # 登陆用户名
remotename PPTPserver
require-mppe-128
file /etc/ppp/options.pptp # 这个必须加
ipparam osppp # 这个是vpn 的启动名称
# 加载模块 :
$> modprobe ppp_mppe
# 创建管理命令 (注: 该命令由于pptp的版本不一样,位置可能不一样,注意检查命令. 另 改命令默认没有执行权限)
$> ln -s /usr/share/doc/ppp-2.4.5/scripts/poff /usr/local/bin/
$> ln -s /usr/share/doc/ppp-2.4.5/scripts/pon /usr/local/bin/
# 启动 :
$> pppd call osppp #或者 pon osppp
## 检查是否拨号成功
$> ip a |grep ppp # 成功返回结果且存在绑定ip则代表拨号成功 ,否则失败,如果是云主机,可能并不支持,即使模块加载成功了
# 关闭:
$> poff osppp
# 路由添加
$> route add -host <需要代理的ip> gw <pptp启动后的默认网关路由ip>
|
1
2
3
4
5
6
7
8
9
10
11
|
docker run -d --privileged --net=host -v /data/docker/ppp/chap-secrets:/etc/ppp/chap-secrets mobtitude/vpn-pptp
# /data/docker/ppp/chap-secrets
# Secrets for authentication using PAP
# client server secret acceptable local IP addresses
stan * smith *
# 登录名、登录协议、密码、该连接上的客户端用什么 IP(* 表示随机一个 IP)
# 程序日志为/var/log/message
# /etc/ppp/ip-up 登陆执行
# /etc/ppp/ip-down 退出执行
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
[root@00 ~]# yum install pptpd -y
[root@00 ~]# vim /etc/pptpd.conf
option /etc/ppp/pptpd-options
#debug
#stimeout 10
logwtmp
#bcrelay eth1
#delegate
#connections 100
localip 10.99.99.1 # 此为本地ip地址,即本地路由地址,本地映射虚拟网卡ip,不同的防火墙转发方式这个有不同的解释 http://blog.topspeedsnail.com/archives/8492; https://blog.oldboyedu.com/vpn-pptp/
remoteip 10.99.99.100-200 # 此为分配给用户的ip段
[root@00 ~]# vim /etc/ppp/pptpd-options
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
# Network and Routing
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
# Logging
# debug
# dump
# Miscellaneous
lock
nobsdcomp
novj
novjccomp
nologfd
# configure firewall
iptables -t nat -A POSTROUTING -s 10.0.10.0/24 ! -d 10.0.10.0/24 -j MASQUERADE
iptables -A FORWARD -s 10.0.10.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS --set-mss 1356
iptables -A INPUT -i ppp+ -j ACCEPT
iptables -A OUTPUT -o ppp+ -j ACCEPT
iptables -A FORWARD -i ppp+ -j ACCEPT
iptables -A FORWARD -o ppp+ -j ACCEPT
# or iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
|
- 可以登陆 但是不能连接公网,或类似无法解析dns的情况(终端正常)
- 问题原因:一般是MTU设置不正确导致的。
- 方案一:在配置VPN的CentOS服务器中执行如下命令,此方案可以临时生效,如果您需要长期生效的方案,请参考 方案二。
1
|
$> ifconfig ppp0 mtu 1472
|
- 方案二:执行vi /etc/ppp/ip-up命令,在/etc/ppp/ip-up文件中增加如下“ifconfig ppp0 mtu 1472”。
1
2
3
|
/etc/ppp/ip-up. ipv6to4 ${LOGDEVICE}
[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local “$@”
ifconfig ppp0 mtu 1472
|
3. 如何使用Shadowsocks 让 CentOS 实现上外网
首先,你需要一个shadowsocks帐号。
然后 CentOS
安装 shadowsocks
通过 pip
安装 shadowsocks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@00 ~]# pip install shadowsocks
# 随后,我们配置好帐号密码,新建`/etc/shadowsocks.json`文件:
[root@00 ~]# cat /etc/shadowsocks.json
{
"server":"your_server_ip", #ss服务器IP
"server_port":your_server_port, #端口
"local_address": "127.0.0.1", #本地ip
"local_port":1080, #本地端口
"password":"your_server_passwd",#连接ss密码
"timeout":300, #等待超时
"method":"rc4-md5", #加密方式
"fast_open": false, # true 或 false。如果你的服务器 Linux 内核在3.7+,可以开启 fast_open 以降低延迟。开启方法: echo 3 > /proc/sys/net/ipv4/tcp_fastopen 开启之后,将 fast_open 的配置设置为 true 即可
"workers": 1 # 工作线程数
}
|
启动:sslocal -c /etc/shadowsocks.json
- 直接使用yum安装即可
yum install privoxy
- 安装好后,修改一下配置
vim /etc/privoxy/config
- 搜索
forward-socks5t
,将forward-socks5t / 127.0.0.1:9050
取消注释并修改为forward-socks5t / 127.0.0.1:1080
- 启动
privoxy /etc/privoxy/config
(systemctl start privoxy)
配置 /etc/profile
1
2
|
export http_proxy=http://127.0.0.1:8118
export https_proxy=https://127.0.0.1:8118
|
修改后使配置生效source /etc/profile
执行curl -I http://www.google.com
看是否成功
备注:如果不需要代理,需要把profile
中变量注释,重新source /etc/profile
此处源码编译安装的使用方式略有不同,注意查看帮助即可
详细说明 :
https://hl0rey.github.io/2018/02/03/proxychains配置详解
sudo dnf install proxychains-ng -y
- 修改配置文件,
vim /etc/proxychains.conf
- 配置文件默认查询顺序
./proxychains.conf
–>~/.proxychains/proxychains.conf
–> /etc/proxychains.conf
- 负载均衡
dynamic_chain
自动跳过不可用
strict_chain
每个代理都使用,不管是否可用
round_robin_chain
轮询模式,自动跳过不可用的代理
random_chain
随机使用代理 (chain_len
是配置每次用的代理个数)
- 默认行修改或添加自己的
socks5 127.0.0.1 1080
地址
- 使用:
proxychains4 curl -I www.google.com
proxychains4 curl api.ip.la