52 | 搭建跳板机服务与管理

1 服务端配置

主机规划与架构

服务器名称操作系统版内网IP外网IP(模拟)角色
test01Ubuntu192.168.20.1被访问机器
test02Ubuntu192.168.20.3被访问机器
openvpn-serverUbuntu192.168.20.110.0.0.200Openvpn-Server
openvpn-clientUbuntu10.0.0.210Openvpn-Client
本地Windows1010.0.0.XOpenvpn-Client

1.1 编译安装

openvpn源码下载地址:

https://github.com/OpenVPN/openvpn

easy-rsa下载地址:

https://github.com/OpenVPN/easy-rsa

windows安装:

https://openvpn.en.softonic.com/

1.2 系统配置

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
cat /proc/sys/net/ipv4/ip_forward
### centos
yum install -y openssl-devel lzo{,-devel} pam-devel

### ubuntu
apt install -y libssl-dev liblz4-dev liblzo2-dev libpam0g-dev
  • 源文件下载在/data/soft/目录下,进入该目录操作
tar xfv openvpn-2.5.2.tar.gz
cd openvpn-2.5.2
./configure --prefix=/usr/local/openvpn-2.5.2
make -j$(nproc)
make install

1.3 证书生成

  • 使用easy-rsa3签发证书
tar xfv EasyRSA-3.0.8.tgz
cd EasyRSA-3.0.8/
mkdir /usr/local/openvpn-2.5.2/easy-rsa
cp -r easyrsa openssl-easyrsa.cnf vars.example x509-types /usr/local/openvpn-2.5.2/easy-rsa/
cd /usr/local/openvpn-2.5.2/easy-rsa/
cp vars.example vars
  • 修改vars文件以下配置
set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "ShangHai"
set_var EASYRSA_REQ_CITY        "ShangHai"
set_var EASYRSA_REQ_ORG         "ShangHai Co"
set_var EASYRSA_REQ_EMAIL       "admin@example.com"
set_var EASYRSA_REQ_OU          "ShangHai"
  • 创建ca证书
./easyrsa init-pki
./easyrsa build-ca nopass
  • 申请server端证书;名称为server,没有密码
./easyrsa gen-req server nopass
    # 以下为输出内容
    # 交互式操作回车即可;注意输出的名称
    Keypair and certificate request completed. Your files are:
    req: /usr/local/openvpn-2.5.2/easy-rsa/pki/reqs/server.req
    key: /usr/local/openvpn-2.5.2/easy-rsa/pki/private/server.key
  • 签发,第一个server为签发类型;第二个server即为上面命令申请证书时使用的名称,务必对应上面申请的证书名称
./easyrsa sign server server
    # 以下为输出内容
    # 交互式操作回车即可;签发的服务证书
    Certificate created at: /usr/local/openvpn-2.5.2/easy-rsa/pki/issued/server.crt
  • 生成dh证书
./easyrsa gen-dh
  • 生成ta密钥
cd ../
./sbin/openvpn --genkey tls-auth ta.key

1.4 创建客户端证书请求

cd /usr/local/openvpn-2.5.2/
mkdir client
cp -r /data/soft/EasyRSA-3.0.8/{easyrsa,openssl-easyrsa.cnf,x509-types,vars.example} ./client/
cd ./client && cp vars.example vars

./easyrsa init-pki
  • 生成证书请求;名称为myuser1(CN Name)
./easyrsa gen-req myuser1 nopass
    # 以下为输出内容
    # 交互式操作回车即可;注意输出的名称保存位置
    Keypair and certificate request completed. Your files are:
    req: /usr/local/openvpn-2.5.2/client/pki/reqs/myuser1.req
    key: /usr/local/openvpn-2.5.2/client/pki/private/myuser1.key

cd /usr/local/openvpn-2.5.2/easy-rsa/
  • 导入证书请求,指定证书请求文件,即前面输出的名称与位置;此命令中最后的myuser1为申请时的名称
./easyrsa import-req /usr/local/openvpn-2.5.2/client/pki/reqs/myuser1.req myuser1
  • 签发

此命令中第二个参数client的为签发类型;第三个参数myuser1为申请时的名称

./easyrsa sign client myuser1
    # 输出内容;签发的client证书位置
    Certificate created at: /usr/local/openvpn-2.5.2/easy-rsa/pki/issued/myuser1.crt
  • 吊销客户端证书
    吊销的证书名称为myuser1;并生成一份吊销证书名单
cd /usr/local/openvpn-2.5.2/easy-rsa/
./easyrsa revoke myuser1
./easyrsa gen-crl
  • 服务端配置文件
    准备服务端使用到的证书文件
cd /usr/local/openvpn-2.5.2/ && mkdir -p conf/cert
cp easy-rsa/pki/ca.crt conf/cert/
cp easy-rsa/pki/private/server.key conf/cert/
cp easy-rsa/pki/issued/server.crt conf/cert/
cp easy-rsa/pki/dh.pem conf/cert/
mv ta.key conf/cert/
  • 修改配置文件
    从源码包中复制配置文件
cp /data/soft/openvpn-2.5.2/sample/sample-config-files/server.conf ./conf/
  • 配置文件内容
local 10.2.3.110 # 监听地址
port 31234 # 端口
proto udp
dev tun
ca cert/ca.crt
cert cert/server.crt
key cert/server.key  
dh cert/dh.pem
server 10.8.0.0 255.255.255.0  # 为Client分配的网段
ifconfig-pool-persist ipp.txt
push "route 192.168.50.0 255.255.255.0"  # 为Client推送的路由,可以是范围也可以是单个IP(掩码为255.255.255.255)
keepalive 30 120
tls-auth cert/ta.key 0
cipher AES-256-GCM
compress lz4-v2  # v2.4+支持此选项,Enable compression on the VPN link
push "compress lz4-v2"
persist-key
persist-tun
status /usr/local/openvpn-2.5.2/logs/openvpn-status.log # 状态文件
log-append /usr/local/openvpn-2.5.2/logs/openvpn.log  # 日志文件
verb 3
explicit-exit-notify 1

注意:使用脚本启动停止;无法启动可去掉–daemon参数进行调试
启动脚本 vim ./sbin/openvpn-startup.sh

#!/bin/bash
dir=/usr/local/openvpn-2.5.2
${dir}/sbin/openvpn --cd ${dir} --daemon --config ${dir}/conf/server.conf

停止脚本 vim ./sbin/openvpn-shutdown.sh

#!/bin/bash
killall -TERM openvpn

1.5 iptables配置

配置openvpn后,且客户端可以连接到openvpn服务器,客户端仅能访问openvpn服务器上的资源,想要访问其他openvpn服务器能够访问的内网资源需要如下条件:

需要openvpn服务端有这个资源的push "route xxx xxx"路由推送
需要有iptables为其做源地址转换
将openvpn client分配的网段来源IP转换为本机的IP,否则无法通过本机访问其他内部网络

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 10.2.3.110
  • 假设eth0 IP地址为动态情况下使用
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
  • 如果服务端有Docker,FORWARD可能会被更改为DROP,则还需要添加FORWARD规则
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT

如果还有其他规则表为DROP,则按需添加放行规则。

2 客户端配置

2.1 配置文件

注意:以下为客户端配置文件,Windows、Linux通用

  • 从以下路径下载证书文件到客户端机器
/usr/local/openvpn-2.5.2/conf/cert/ca.crt
/usr/local/openvpn-2.5.2/conf/cert/ta.key
/usr/local/openvpn-2.5.2/easy-rsa/pki/issued/myuser1.crt
/usr/local/openvpn-2.5.2/client/pki/private/myuser1.key

默认证书文件为配置文件同目录中,否则请写完整路径;

remote即服务端地址

client
dev tun
proto udp
remote 10.2.3.110 31234
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert myuser1.crt
key myuser1.key
tls-auth ta.key 1
remote-cert-tls server
comp-lzo
allow-compression yes
keysize 256
verb 3

2.2 Linux客户端

同服务端一样,编译完成后使用客户端的配置文件直接启动即可

2.3 Windows客户端

  • 该网络可能需要科学上网。
  • windows配置文件以.ovpn后缀结尾,配置文件可存放于openvpn程序的config目录下或任意位置,通过启动的程序->选项->高级->配置文件指定路径
  • 程序安装点击下一步即可(记得勾选TAP网卡安装)。

2.4 配置固定IP

给客户端配置固定的IP地址。第一个IP为Client IP,第二个IP为服务端IP端点,此IP必须在服务端的vpn地址分配范围内,且属于255.255.255.252掩码范围中的可用地址;如当前配置,10.8.0.9/30,其网络为10.8.0.8,可用IP 10.8.0.9-10,广播 10.8.0.11。

  • ccd目录中的文件名称要和客户端使用的证书中CN名称一致
  • 在服务端conf/server.conf文件中配置此选项
client-config-dir conf/ccd
  • 创建ccd,为client(CN Name)用户固定IP地址
cd /usr/local/openvpn-2.5.2/ && mkdir conf/ccd
echo 'ifconfig-push 10.8.0.9 10.8.0.10' > conf/ccd/client
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值