因为之前本科参与开发的一个互联网新闻采集系统需要爬取几个国外的新闻站点,通过翻墙才能访问,而我们的服务器是阿里云服务器,没有操作界面,而且抽取任务是定时执行,必须要实现程序控制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服务器集群代理配置的更多相关文章

  1. Linux服务器集群系统(一)--转

    引用地址:http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 月 本文介 ...

  2. Linux服务器集群系统(一)(转)

    add by zhj:虽然是2002年的文章,但读来还是收益良多.在 章文嵩:谈LVS及阿里开源背后的精彩故事 中LVS发起人及主要贡献者谈了LVS的开发过程及阿里开源的一些故事 原文:http:// ...

  3. 【原创】Linux服务器集群通过SSH无密码登录

    SSH 无密码授权访问slave集群机器 1. 安装SSH,所有集群机器,都要安装SSH环境介绍:  Master : CNT06BIG01 192.168.3.61 SLAVE 1: CNT06BI ...

  4. Linux服务器集群系统(LVS)

    from:http://www.linuxvirtualserver.org/zh/lvs1.html#5 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目 ...

  5. 浅析Linux服务器集群系统技术

    浅析Linux服务器集群系统技术 目录 前言 常用的服务器集群 集群系统的优势 LVS集群的通用体系结构 为什么使用层次的体系结构 为什么是共享存储 可伸缩Web服务 前言 总结两篇技术文章,努力学习 ...

  6. Linux服务器集群系统(一)

    Reference: http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 ...

  7. 官方文档-Linux服务器集群系统(一)

    转载-Linux服务器集群系统(一) LVS项目介绍 章文嵩 (wensong@linux-vs.org)2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual ...

  8. 转载-lvs官方文档-Linux服务器集群系统(二)

    Linux服务器集群系统(二) LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并 ...

  9. 大数据之Linux服务器集群搭建

    之前写过一篇关于Linux服务器系统的安装与网关的配置,那么现在我们要进一步的搭建多台Linux服务器集群. 关于单台服务器的系统搭建配置就不在赘述了,详情见https://www.cnblogs.c ...

随机推荐

  1. DALFactory出现"未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件”的解决方案 .

    自己在使用抽象工厂+配置文件+反射实现重构机房的过程中,遇到了这种情况, 当初自己认真的检查了反射中的代码,都是没有问题,请教了师姐,检查了抽象工厂与反射的使用都没有问题 // 查找我们将要使用的数据 ...

  2. Jupyter notbook 修改默认路径

    打开 cmd 输入命令 jupyter notebook --generate-config  2.打开配置文件  3.修改路径  转自: https://blog.csdn.net/zw__chen ...

  3. centos下通过yum安装redis-cli

    redis在第三方的源里,首先添加源,最常用的是epel源 yum install epel-release 然后就可以安装redis了 yum install -y redis 安装完成以后配置文件 ...

  4. 乐字节Java之file、IO流基础知识和操作步骤

    嗨喽,小乐又来了,今天要给大家送上的技术文章是Java重点知识-IO流. 先来看看IO流的思维导图吧. 一. File 在Java中,Everything is Object!所以在文件中,也不例外! ...

  5. kafka那些事儿

    1 为什么用消息队列 1)解耦.服务之间没有强依赖,不需要关心调用服务时出现的各种异常,服务挂掉后接口超时等问题 2)异步.解决接口调用多服务时延时高的问题 3)高峰期服务间缓冲.解决工作节奏不一致问 ...

  6. 多线程(11) — NIO

    Java NIO是new IO的简称,是一种可以替代Java IO的一套新的IO机制.它提供了一套不同于Java标准IO的操作机制,严格来说,NIO与并发并无直接关系,但是使用NIO技术可以大大提高线 ...

  7. 剑指offer13:数组[奇数,偶数],奇数偶数相对位置不变。

    1. 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 2. 思路和方 ...

  8. 最佳thread数量

    cpu 密集性task,过多的线程反而降低了处理效率,最佳的做法就是保持和cpu core数量大致相同的线程数量: threads = number of CPUs + 1 io密集型,因为会有cpu ...

  9. flex左右布局 左边固定 右侧自适应

    flex左右布局 左边固定 右侧自适应 想要保证自适应内容不超出容器怎么办. 通过为自适应的一侧设置width: 0;或者overflow: hidden;解决. 首先实现标题的布局,也很简单: &l ...

  10. linux根文件系统的挂载过程详解

    一:前言 前段时间在编译kernel的时候发现rootfs挂载不上.相同的root选项设置旧版的image却可以.为了彻底解决这个问题.研究了一下rootfs的挂载过程.特总结如下,希望能给这部份知识 ...