Linux服务器集群代理配置
因为之前本科参与开发的一个互联网新闻采集系统需要爬取几个国外的新闻站点,通过翻墙才能访问,而我们的服务器是阿里云服务器,没有操作界面,而且抽取任务是定时执行,必须要实现程序控制VPN的连接与断开。所以就学习如何在linux上利用命令行和脚本操作建立VPN连接,单纯探索的过程没少走弯路,所以把经验分享出来供大家学习。
一、L2TP简介
Linux翻墙一般利用L2TP协议进行VPN的连接操作,建立连接需要拥有L2TP的服务器IP,用户名,密码和共享秘钥,这是合作方清华大学提供的代理信息(为了保密,密码什么的做了隐藏)
IP:xxx.xxx.xxx.xxx
Type:L2TP
用户名 linode
密码 sharedPasswd
共享密钥 sharedKey
我搭建的时候参考的这个链接:https://www.elastichosts.com/blog/linux-l2tpipsec-vpn-client/
想了解L2TP的可以参考这个链接:https://baike.so.com/doc/3372814-3550913.html
二、单台linux主机连接vpn配置
1.安装软件
更新linux系统自带的软件资源库
$ sudo apt-get update
安装软件
$ sudo apt-get install openswan xl2tpd
2.修改IPsec配置文件
$ sudo vi /etc/ipsec.conf
在ipsec.conf里添加以下内容:(注意:conn顶格写,authby前面空8格)
conn L2TP-PSK
authby=secret
pfs=no
auto=add
keyingtries=3
dpddelay=30
dpdtimeout=120
dpdaction=clear
rekey=yes
ikelifetime=8h
keylife=1h
type=transport
left=%defaultroute
leftnexthop=%defaultroute
leftprotoport=17/1701
right=xxx.xxx.xxx.xxx <— ip修改为代理服务器的ip
rightprotoport=17/1701
实际操作截图:

3.配置用户认证,添加共享密码
$ sudo vi /etc/ipsec.secrets
添加如下内容
0.0.0.0 xxx.xxx.xxx.xxx: "sharedKey"

4.验证配置
$ sudo /etc/init.d/ipsec start
$ sudo ipsec auto --up L2TP-PSK
如果看到一些输出,代表没有问题
$ sudo /etc/init.d/ipsec stop
5.修改xl2tpd配置文件
$ sudo vi /etc/xl2tpd/xl2tpd.conf 添加如下内容
[lac vpn-connection]
lns =xxx.xxx.xxx.xxx <— ip修改为代理服务器的ip
refuse chap = yes
refuse pap = yes
require authentication = yes
name = vpn-server
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
实际操作截图
注:文件以;开头的行,是注释该行的意思

6.修改options.l2tpd.client配置文件
$ sudo vi /etc/ppp/options.l2tpd.client
添加如下内容
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
idle 1800
mtu 1410
mru 1410
defaultroute
usepeerdns
debug
lock
connect-delay 5000
name linode <— 用户名
password sharedPasswd <— 密码
实际操作截图:

7.连接到VPN
开启ipsec服务
$ sudo /etc/init.d/ipsec start

开启xl2tpd服务
$ sudo /etc/init.d/xl2tpd start

$ sudo ipsec auto --up L2TP-PSK

更改xl2tpd文件夹的权限
$ sudo chown -R hadoop:hadoop /var/run/xl2tpd/
建立ppp0点对点链接
$ sudo echo "c vpn-connection" > /var/run/xl2tpd/l2tp-control
可以通过ifconfig命令看到已经建立了ppp0点对点连接

而此前是没有ppp0的点对点连接的,如图所示:

8.设置所有流量走VPN
到这个步骤只是连接上了L2TP服务器,加入了VPN的网络,但是还不能访问国外网站,需要进一步设置流量走VPN
注:下面是设置此项所用到的参数信息
xxx.xxx.xxx.xxx为代理服务器的ip,
114.215.83.247是服务器的外网网关,
114.215.82.131是服务器的外网ip,
eth0为外网的连接名,下面的命令中也用到了这些ip
使用ip route show命令来查看当前上网所使用的网关 注:为了安全起见,进行了隐藏处理,红色部分为网关,蓝色部分为外网IP

继续执行下面的命令:
$ sudo ip route replace xxx.xxx.xxx.xxx via 114.215.83.247 dev eth1 src 114.215.82.131
$ sudo ip route replace default dev ppp0
再使用ip route show 命令看到网关已经改成了vpn服务器的ip,如图:

9.测试vpn的使用是否成功
以facebook和百度为例,进行ping测试
$ ping www.facebook.com
可以看到可以ping通facebook

$ ping www.baidu.com 注:由于流量走vpn导致国内网站延迟变高

10.断开vpn连接
$ sudo ip route del xxx.xxx.xxx.xxx via 114.215.83.247 dev eth1 src 114.215.82.131
$ sudo ip route del default dev ppp0
$ sudo ip route add default via 114.215.83.247
$ sudo /etc/init.d/xl2tpd stop
$ sudo /etc/init.d/ipsec stop
到此已经关闭了vpn,恢复了正常的上网状态,ping百度测试,如图所示:

三、linux集群统一连接vpn
1.仿照第二步对集群每台机器配置好vpn连接
2.利用脚本控制每台机器的vpn连接(以阿里云2为例)
登录阿里云2
$ ssh hadoop2
$ vi startVpn.sh
在脚本startVpn.sh中添加如下内容,xxx.xxx.xxx.xxx为VPN服务器ip
#! / bin/sh
echo "服务器密码" | sudo -S ip route replace xxx.xxx.xxx.xxx via 121.42.139.247 dev eth1 src 121.42.137.47
sleep 1s
echo "服务器密码" | sudo -S chown -R hadoop:hadoop /var/run/xl2tpd/
echo "c vpn-connection" > /var/run/xl2tpd/l2tp-control
sleep 10s
echo "服务器密码" | sudo -S ip route replace default dev ppp0
:wq!保存退出
注:echo "密码" | sudo –S 命令 这种写法可以使sudo的脚本自动输入密码
$ vi closeVpn.sh
在脚本closeVpn.sh中添加如下内容:
#! / bin/sh
echo "服务器密码" | sudo -S ip route del xxx.xxx.xxx.xxx via 121.42.139.247 dev eth1 src 121.42.137.47
echo "服务器密码" | sudo -S ip route del default dev ppp0
echo "服务器密码" | sudo -S ip route add default via 121.42.139.247
echo "服务器密码" | sudo -S /etc/init.d/xl2tpd restart
:wq!保存退出
对各台机器重复此操作,保证每台机器上都有startVpn.sh和closeVpn.sh脚本
3.在主节点上实现对集群的vpn控制(阿里云1)
$ vi startAllVpn.sh
添加以下内容
#! / bin/sh
sh startVpn.sh
ssh -p 22 hadoop@hadoop2 'sh startVpn.sh'
ssh -p 22 hadoop@hadoop3 'sh startVpn.sh'
ssh -p 22 hadoop@hadoop4 'sh startVpn.sh'
ssh -p 22 hadoop@hadoop5 'sh startVpn.sh'
sleep 7500s
sh closeVpn.sh
ssh -p 22 hadoop@hadoop2 'sh closeVpn.sh'
ssh -p 22 hadoop@hadoop3 'sh closeVpn.sh'
ssh -p 22 hadoop@hadoop4 'sh closeVpn.sh'
ssh -p 22 hadoop@hadoop5 'sh closeVpn.sh'
:wq!保存退出
注:sleep 7500秒后,脚本自动关闭vpn连接,是我们定义的一种安全机制
$ vi closeAllVpn.sh 该脚本会由java程序执行完抽取任务后自动调用关闭vpn
添加以下内容:
#! / bin/sh
sh closeVpn.sh
ssh -p 22 hadoop@hadoop2 'sh closeVpn.sh'
ssh -p 22 hadoop@hadoop3 'sh closeVpn.sh'
ssh -p 22 hadoop@hadoop4 'sh closeVpn.sh'
ssh -p 22 hadoop@hadoop5 'sh closeVpn.sh'
:wq!保存退出
4.开启集群vpn连接
$ sh startAllVpn.sh
5.关闭集群vpn连接
$ sh closeAllVpn.sh
Linux服务器集群代理配置的更多相关文章
- Linux服务器集群系统(一)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 月 本文介 ...
- Linux服务器集群系统(一)(转)
add by zhj:虽然是2002年的文章,但读来还是收益良多.在 章文嵩:谈LVS及阿里开源背后的精彩故事 中LVS发起人及主要贡献者谈了LVS的开发过程及阿里开源的一些故事 原文:http:// ...
- 【原创】Linux服务器集群通过SSH无密码登录
SSH 无密码授权访问slave集群机器 1. 安装SSH,所有集群机器,都要安装SSH环境介绍: Master : CNT06BIG01 192.168.3.61 SLAVE 1: CNT06BI ...
- Linux服务器集群系统(LVS)
from:http://www.linuxvirtualserver.org/zh/lvs1.html#5 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目 ...
- 浅析Linux服务器集群系统技术
浅析Linux服务器集群系统技术 目录 前言 常用的服务器集群 集群系统的优势 LVS集群的通用体系结构 为什么使用层次的体系结构 为什么是共享存储 可伸缩Web服务 前言 总结两篇技术文章,努力学习 ...
- Linux服务器集群系统(一)
Reference: http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 ...
- 官方文档-Linux服务器集群系统(一)
转载-Linux服务器集群系统(一) LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual ...
- 转载-lvs官方文档-Linux服务器集群系统(二)
Linux服务器集群系统(二) LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并 ...
- 大数据之Linux服务器集群搭建
之前写过一篇关于Linux服务器系统的安装与网关的配置,那么现在我们要进一步的搭建多台Linux服务器集群. 关于单台服务器的系统搭建配置就不在赘述了,详情见https://www.cnblogs.c ...
随机推荐
- LintCode: coins in a line I
有 n 个硬币排成一条线.两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止.拿到最后一枚硬币的人获胜. 请判定 第一个玩家 是输还是赢? n = 1, 返回 true.n = 2, ...
- 关于STM32F405的GPIO中断问题
1. 下面的图,应该是多个引脚中断挂在同一个中断号上面,也就是PA0和PB0同时挂在一个中断源上面,那么就是说只能同时使用其中一个 寄存器的配置,确实只能有一个使用
- 创建 LVM
1.将物理磁盘设备条带化为物理卷 # pvcreate /dev/sdb 查看物理卷: # pvs# pvdisplay 2.创建卷组,并添加 PV 到卷组 # vgcreate vg1 /dev/s ...
- 【GStreamer开发】GStreamer播放教程02——字幕管理
目标 这篇教程和上一篇非常相似,但不是切换音频流,而是字幕了.这次我们会展示: 如何选择选择字幕流 如何引入外部的字幕 如何客制化字幕使用的字体 介绍 我们都知道一个文件可以有多个音视频流并且可以使用 ...
- css 修改placeholder样式
input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ co ...
- 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式
目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...
- Java线程同步synchronized的理解
JVM中(留神:马上讲到的这两个存储区只在JVM内部与物理存储区无关)存在一个主内存(Main Memory),Java中所有的变量存储在主内存中,所有实例和实例的字段都在此区域,对于所有的线程是共享 ...
- Python07之分支和循环2(if...else、if...elif...else)
一:if语句具体语法: if 表达式: 语句块 (表达式可以是一个布尔值或变量,也可以为一个逻辑表达式或比较表达式,表达式为真(即不为0即可,见下方实例),则运行语句块:表达式为假,则跳过语句块,继续 ...
- MySQL8.0新特性实验1
Server层,选项持久化 mysql> show variables like '%max_connections%';+------------------------+-------+| ...
- Spring Boot集成Mybatis完整实例
步骤: 添加Mybatis依赖: 添加数据库依赖: 配置属性文件: (具体的属性名称可以在jar包中找到) 内容: 建表sql: Mapper文件的头: 集成Mybatis的配置文件中的具体内容可以在 ...