I.概要
***仮想プライベートネットワークは、ispおよびその他のNSPに依存して、パブリックネットワーク内に専用のデータ通信ネットワークを確立するテクノロジーです。これにより、企業間または個人と企業間で安全なデータ送信トンネルサービスを提供できます。VPN内の任意の2点間の接続には、従来のプライベートネットワークで必要なエンドツーエンドの物理リンクがありませんが、パブリックネットワークリソースを使用して動的に構成されます。これは、パブリックデータネットワーク上のプライベートトンネルテクノロジーとして理解できます。プライベートネットワークと同じ機能を持つ、シミュレートされたポイントツーポイントのプライベートラインテクノロジー。いわゆる仮想手段は、実際の長距離物理回線を使用する必要はありませんが、インターネットパブリックネットワークを借用して実現します。
- Open ***は、元々James Yonanによって作成された、仮想プライベートネットワーク暗号化チャネルの作成に使用されるソフトウェアパッケージです。Open ***を使用すると、作成された***は、認証に公開キー、電子証明書、またはユーザー名/パスワードを使用できます。
- OpenSSL暗号化ライブラリのSSLv3 / TLSv1プロトコルライブラリを広範囲に使用します。
- 現在、Open ***は、Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X、Microsoft Windows、およびAndroidとiOSで実行でき、多くのセキュリティ機能が含まれています。これはWebベースのVPNソフトウェアではなく、IPsecやその他のVPNソフトウェアパッケージとも互換性がありません。
1.開くことができる問題***解決する
open ***を使用すると、分離環境のイントラネットなどの分離環境で、クラスター内の他のサーバーホストにリモートでログインできます。たとえば、Alibaba Cloud環境のさまざまなネットワークに基づいて、正式な環境、テスト環境、および自動化ツールプラットフォームを作成します。環境など、open ***などの基本サービスを利用して、テスト環境と本番環境、自動化ツールプラットフォーム環境との通信を可能にし、テスト環境と本番環境を分離するだけでなく、継続的な統合と継続的な展開を通じてビジネスを完成させます。上下に移動します。
2. Open ***実現原則:
Open ***の技術的なコアは、仮想ネットワークカードであり、その後にSSLプロトコルが実装されます。
Openの仮想ネットワークカード***
仮想ネットワークカードは、基盤となるネットワークプログラミングテクノロジを使用して実装されたドライバソフトウェアです。この種のプログラムをインストールすると、非実在のネットワークカードがホストに追加され、他のネットワークカードと同じように構成できます。サービスプログラムは、アプリケーション層で仮想ネットワークカードを開くことができます。アプリケーションソフトウェア(Webブラウザなど)が仮想ネットワークカードにデータを送信すると、サービスプログラムはデータを読み取ることができます。サービスプログラムが適切なデータを仮想ネットワークカードに書き込むと、アプリケーションソフトウェアもそれを受信できます。仮想ネットワークカードは、多くのオペレーティングシステムで対応する実装を備えています。これは、Open ***をプラットフォーム間で使用できる重要な理由でもあります。
Open ***では、ユーザーがリモート仮想アドレス(仮想ネットワークカードで使用されるアドレスシリーズに属し、実際のアドレスとは異なる)にアクセスすると、オペレーティングシステムはデータパケット(TUNモード)またはデータフレーム(TAPモード)が仮想ネットワークカードに送信され、サービスプログラムがデータを受信して対応する処理を行った後、SOCKETを介して外部ネットワークから送信されます。これで一方向の送信プロセスが完了し、その逆も同様です。リモートサービスプログラムがSOCKETを介して外部ネットワークからデータを受信し、対応する処理を実行してから、それを仮想ネットワークカードに送り返すと、アプリケーションソフトウェアはそれを受信できます。
3.オープン***ロードの高い可用性を確保する方法
-
クライアント側で複数の構成ファイルをロードする:同じオフィススタッフがopen ***を使用して環境にアクセスする場合、複数のopen ***サーバーを使用することでトラフィックの混雑を回避できます。この時点で、追加できます。サービス構成ファイルを他のサーバーにコピーし、異なるIPアドレスで別のopen ***サーバーを起動します。これにより、異なる構成ファイルをローカルで使用して、open ***アクセスの低速トラフィック輻輳を回避できます。
- リモートランダムを使用したロード:複数の構成ファイルと同様に、ソリューションを完了するには複数のOpen ***サーバーが必要ですが、このソリューションはよりスマートです。クライアントは、どのOpen ***に接続するために使用する構成ファイルを手動で選択する必要がなくなりました* **サーバー、これらのOpen *** GUIは、自動的にそれを実現するのに役立ちます。クライアント構成ファイルにリモートランダムおよび複数のリモート構成セクションを追加するだけで済みます。
4.暗号化と認証
-
暗号化:Open ***は、OpenSSLライブラリを使用してデータを暗号化し、情報を制御します。これは、OpenSSLでサポートされている任意のアルゴリズムを使用できることを意味します。オプションのデータパケットHMAC機能を提供して、接続のセキュリティを向上させます。さらに、OpenSSLのハードウェアアクセラレーションもパフォーマンスを向上させることができます。PolarSSLはバージョン2.3.0以降で導入されています。
- 本人確認:Open ***は、接続された当事者の本人確認を行うためのさまざまな本人確認方法を提供します。最も一般的に使用されるのは、次の3つです。
预享私钥 第三方证书 用户名/密码组合
- 事前共有キーは最も単純ですが、同時にポイントツーポイントVPNの作成にのみ使用できます。PKIベースのサードパーティ証明書は最も完全な機能を提供しますが、追加のPKI証明書システムが必要です。Open *** 2.0でユーザー名とパスワードの組み合わせの認証方法が導入された後は、クライアント証明書を省略できますが、暗号化にはサーバー証明書が必要です。
2. Open ***展開プロセスと環境要件:
1。展開プロセス:
- 通信データを圧縮して送信を高速化するために使用されるlzoをインストールします。lzoをコンパイルしてインストールするには、openをコンパイルしてインストールするときにlzoの場所を指定する必要があります***
- open ***とeasy-rsaをインストールします。esay-rsaは、CAルート証明書とサーバークライアント証明書および通信キーを生成するために使用されます
- サーバー証明書を生成する
- クライアントユーザー署名証明書を生成する
- Diffie Hermanキーを生成し、dh2048.pemファイルを生成します
- 防止ddos ***キーファイルを生成します
2.環境要件:
- サーバー:Centos7.6-1810
- クライアント:Windows10
- open ***バージョン:Open *** 2.4.9 x86_64-redhat-linux-gnu
- easy-rsaバージョン:easy-rsa-3.0.5
3. GitHubでeasy-rsaの最新バージョンをダウンロードします:https://github.com/Open***/easy-rsa
3つのopen ***デプロイメント構成:
1. open ***とeasy-rsaをデプロイします(このパッケージはCA証明書の作成に使用されます)
// 1、安装epel仓库源
[root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
[root@localhost ~]# rpm -Uvh epel-release-6-8.noarch.rpm //安装epel 仓库源
//2、安装open***
[root@localhost ~]# yum install open***
Installed:
open***.x86_64 0:2.4.9-1.el6
Dependency Installed:
pkcs11-helper.x86_64 0:1.11-3.el6
Complete!
//3、安装easy-rsa:将GitHub上下载的包上传到服务器:easy-rsa-3.0.5.zip
[root@localhost ~]# unzip easy-rsa-3.0.5.zip
[root@localhost ~]# mv easy-rsa-3.0.5 easy-rsa
[root@localhost ~]# ls
easy-rsa easy-rsa-master.zip
/ etc / open ***構成ファイルを構成します
//1、创建目录,并复制easy-rsa 目录到open***目录下
[root@localhost ~]# mkdir -p /etc/open***/
[root@localhost ~]# cp -a easy-rsa /etc/open***/
//2、配置,编辑vars文件,根据自己环境配置
[root@localhost ~]# cd /etc/open***/easy-rsa/easyrsa3
[root@localhost easyrsa3]# cp vars.example vars
[root@localhost easyrsa3]# vim vars
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Zhejiang"
set_var EASYRSA_REQ_CITY "Hangzhou"
set_var EASYRSA_REQ_ORG "Open***"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "My Open***"
2.サーバー証明書とキーを作成します。
//1、切换/etc/open***/easy-rsa/easyrsa3/目录并初始化
[root@localhost ~]# cd /etc/open***/easy-rsa/easyrsa3/
[root@localhost easyrsa3]# ./easyrsa init-pki
Note: using Easy-RSA configuration from: /etc/open***/easy-rsa/easyrsa3/vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/open***/easy-rsa/easyrsa3/pki //新创建的pki目录地址
//2、创建根证书
[root@localhost easyrsa3]# ./easyrsa build-ca
Enter New CA Key Passphrase: //EPM密码:123456,
Re-Enter New CA Key Passphrase: //后期为证书签名是会用到
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Open***-ca //设置common name通用名:Open***-ca
Your new CA certificate file for publishing is at:
/etc/open***/easy-rsa/easyrsa3/pki/ca.crt //ca证书文件地址
//3、创建服务器端证书:
[root@localhost easyrsa3]# ./easyrsa gen-req server nopass
Common Name (eg: your user, host, or server name) [server]:Open***-server
Keypair and certificate request completed. Your files are:
req: /etc/open***/easy-rsa/easyrsa3/pki/reqs/server.req
key: /etc/open***/easy-rsa/easyrsa3/pki/private/server.key
//该过程中需要输入common name,随意但是不要跟之前的根证书的一样
2.1。サーバー証明書に署名します
[root@localhost easyrsa3]# ./easyrsa sign server server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes //键入yes表示生成
Using configuration from /etc/open***/easy-rsa/easyrsa3/pki/easy-rsa-106473.G6htKP/tmp.PK2ZW1
Enter pass phrase for /etc/open***/easy-rsa/easyrsa3/pki/private/ca.key: 123456 //键入创建CA时的密码,如果忘记了,重头再来一次吧。
Certificate created at: /etc/open***/easy-rsa/easyrsa3/pki/issued/server.crt //server.crt证书位置
3. Diffie-Hellmanを作成し、
//创建Diffie-Hellman,确保key穿越不安全网络的命令
[root@localhost easyrsa3]# ./easyrsa gen-dh
Note: using Easy-RSA configuration from: /etc/open***/easy-rsa/easyrsa3/vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...................+......+............................................++*++*
DH parameters of size 2048 created at /etc/open***/easy-rsa/easyrsa3/pki/dh.pem //2048DH参数文件位置
4.クライアント証明書を作成します
//1、在root目录下新建client文件夹,cp之前解压的easy-ras目录到client文件夹
[root@localhost ~]# mkdir client
[root@localhost ~]# cp -r /etc/open***/easy-rsa/ client/
[root@localhost ~]# cd client/easy-rsa/easyrsa3/
//2、初始化
[root@localhost easyrsa3]# ./easyrsa init-pki //需输入yes 确定
Type the word 'yes' to continue, or any other input to abort.
Confirm removal: yes
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /root/client/easy-rsa/easyrsa3/pki //pki文件地址
//3、创建客户端key及生成证书(记住生成是自己客户端登录输入的密码)
[root@localhost easyrsa3]# ./easyrsa gen-req open***-client //名字自己定义
Enter PEM pass phrase:654321 //设置客户端登录时的密码
Verifying - Enter PEM pass phrase:654321 //此密码后期登录客户端时需用到
Common Name (eg: your user, host, or server name) [open***-client]:open***-client //设置定义客户端的名字
Keypair and certificate request completed. Your files are:
req: /root/client/easy-rsa/easyrsa3/pki/reqs/open***-client.req
key: /root/client/easy-rsa/easyrsa3/pki/private/open***-client.key //客户但key整数地址
//4、将得到的open***-client.req导入然后签约证书
[root@localhost easyrsa3]# cd /etc/open***/easy-rsa/easyrsa3/ //切换到/etc/open***/easy-rsa/easyrsa3/目录下
[root@localhost easyrsa3]# ./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/open***-client.req open***-client //导入req
The request has been successfully imported with a short name of: open***-client
You may now use this name to perform signing operations on this request.
[root@localhost easyrsa3]# ./easyrsa sign client open***-client //签约证书 //这里生成client所以必须为client,open***-client名字要与之前导入名字一致
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes //yes同意执行
Using configuration from /etc/open***/easy-rsa/easyrsa3/pki/easy-rsa-106795.0lVxFk/tmp.ky2xRR
Enter pass phrase for /etc/open***/easy-rsa/easyrsa3/pki/private/ca.key:123456 //输入之前创建的CA的密码
Data Base Updated
Certificate created at: /etc/open***/easy-rsa/easyrsa3/pki/issued/open***-client.crt //open***-client.crt文件地址
5.必要なファイルをサーバー側のetc / open *** /ディレクトリに配置します:CA証明書、サーバー証明書、秘密鍵
[root@localhost ~]# cp /etc/open***/easy-rsa/easyrsa3/pki/ca.crt /etc/open***/
[root@localhost ~]# cp /etc/open***/easy-rsa/easyrsa3/pki/private/server.key /etc/open***/
[root@localhost ~]# cp /etc/open***/easy-rsa/easyrsa3/pki/issued/server.crt /etc/open***/
[root@localhost ~]# cp /etc/open***/easy-rsa/easyrsa3/pki/dh.pem /etc/open***/
[root@localhost ~]# ls /etc/open***/
ca.crt dh.pem server.crt server.key
6.クライアントの必要なファイルをroot / open *** /ディレクトリに置きます:クライアント証明書、秘密鍵
[root@localhost ~]# cp /etc/open***/easy-rsa/easyrsa3/pki/ca.crt /root/client/
[root@localhost ~]# cp /etc/open***/easy-rsa/easyrsa3/pki/issued/open***-client.crt /root/client/
[root@localhost ~]# cp /root/client/easy-rsa/easyrsa3/pki/private/open***-client.key /root/client/
[root@localhost ~]# ls /root/client/
ca.crt open***-client.crt open***-client.key
7.サーバー構成ファイルを構成します。
//1将server.conf配置文件cp到/etc/open***目录下
[root@localhost ~]# rpm -ql open*** |grep server.conf
/usr/share/doc/open***-2.4.9/sample/sample-config-files/server.conf
//当open***部署完成后,会给我们提供一个server配置的文件例子,
//在/usr/share/doc/open***-2.4.9/sample/sample-config-files/ 下有一个server.conf文件,
[root@localhost ~]# cp /usr/share/doc/open***-2.4.9/sample/sample-config-files/server.conf /etc/open***/
//2、编辑配置文件server.conf
[root@localhost ~]# vim /etc/open***/server.conf
[root@localhost ~]# grep '^[^#|;]' /etc/open***/server.conf //修改后的版本如下
local 0.0.0.0 //监听地址
port 1194 //监听端口
proto tcp //监听协议
dev tun //采用路由隧道模式
ca /etc/open***/ca.crt //ca证书路径
cert /etc/open***/server.crt //服务器证书
key /etc/open***/server.key //服务器秘钥
dh /etc/open***/dh.pem //密钥交换协议文件
server 10.10.0.0 255.255.255.0 //给客户端分配地址池,注意:不能和***服务器内网网段有相同
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp" //给网关
push "dhcp-option DNS 8.8.8.8" //dhcp分配dns
client-to-client //客户端之间互相通信
keepalive 10 120 //存活时间,10秒ping一次,120 如未收到响应则视为断线
# tls-auth ta.key 0 //这个文件是设置保密秘钥的,暂时没有配置,客户端处应关闭
comp-lzo //传输数据压缩
max-clients 100 //最多允许 100 客户端连接
user open*** //用户
group open*** //用户组
persist-key
persist-tun
status /var/log/open***/open***-status.log //连接状态文件地址
log /var/log/open***/open***.log //日志文件地址
verb 3
//3、配置文件创建完成后,创建open***.log文件地址及创建open***用户和组:
[root@localhost ~]# mkdir /var/log/open***
[root@localhost ~]# chown -R open***.open*** /var/log/open***/
[root@localhost ~]# chown -R open***.open*** /etc/open***/*
8.ファイアウォールiptablesをオンにし、natルールを設定し、ルーティングと転送をオンにします
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -j MASQUERADE
[root@localhost ~]# iptables -vnL -t nat
0 0 MASQUERADE all -- * * 10.10.0.0/24 0.0.0.0/0
[root@localhost ~]# vim /etc/sysctl.conf //打开路由转发
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
9. open ***サービスを開きます
[root@localhost ~]# systemctl start open***.service
[root@localhost ~]# systemctl enable open***.service
[root@localhost ~]# systemctl status open***.service
[root@localhost ~]# open*** /etc/open***/server.conf //开启服务
[root@localhost sbin]# ss -tunlp |grep 1194
tcp 32 *:1194 *:* users:(("open***",pid=107194,fd=6))
//若是开启后没有打开1194端口,没说明开启服务失败,可能配置文件错误,也可能是权限不够,查询日志定位问题
3、ウィンドウの下のクライアントを介してopen ***に接続します
1.WindowsでのOpen *** 2.4.9クライアントアドレス:http://www.npackd.org/p/open *** 64 / 2.4.9
2.クライアントクライアント構成ファイル
sample-configを構成します-> client.o ***テンプレートを開きます->以下に示すようにコンテンツを変更します->そしてそれをconfigディレクトリの下にコピーします-> END
// open***客户端client.o***配置说明:
client //定义是一个客户端
;dev tap //定义使用设备类型,与服务端一致
dev tun
;dev-node(示例) //定义Windows下使用的网卡名称,linux不需要
proto tcp //定义使用的协议,与服务端一致
;proto udp
remote 192.168.1.59 1194 //指定服务端地址和端口,可以用多行指定多台服务器;实现负载均衡(从上往下尝试)
;remote my-server-2 1194 //open***服务器的外网ip地址和端口,ip或域名都可以
;remote-random //若上面配置了多台服务器,让客户端随机连接
# Keep trying indefinitely to resolve the //解析服务器域名
# host name of the Open*** server. Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite
# Most clients do not need to bind to //客户端不需要绑定端口
# a specific local port number.
nobind
;user nobody // nobody用户和组:是为了让Open***也nobody运行(安全)
;group nobody //注意:Windows不能设置
# Try to preserve some state across restarts.
persist-key
persist-tun
;http-proxy-retry # retry on connection failures //若客户端通过HTTP Proxy,在这里设置
;http-proxy [proxy server] [proxy port #] //要使用Proxy,不能使用UDP为***的通讯协议
;mute-replay-warnings //无线网络有很多多余的头文件,设置忽略它
ca "D:\\open***\\config\\ca.crt" //ca证书地址:重点,就是指定ca和客户端的证书
cert "D:\\open***\\config\\open***-client.crt" //证书地址:注意,下面的两个号是连在一起的,之间没有空格
key "D:\\open***\\config\\open***-client.key" //秘钥地址:注意:因为配置文件\是脚本内容模式,使用\\代表单斜杠定义
;auth-user-pass // 如果服务端打开了PAM认证模块,如mysql,LDAP数据库验证,客户端需要另其有效
# Verify server certificate by checking //一些安全措施
# that the certicate has the nsCertType
# field set to “server”. This is an
# important precaution to protect against
# a potential attack discussed here:
# http://open***.net/howto.html#mitm
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to “server”. The build-key-server
# script in the easy-rsa folder will do this.
;ns-cert-type server
# then every client must also have the key. //增强验证加密,如果你在服务器端生成了ta.key,那么这里就需要加上
;tls-auth ta.key 1 //重点:服务端配置文件没有开启ta.key验证,所以不用启用
# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x
comp-lzo # 使用lzo压缩,与服务端一致
# Set log file verbosity.
verb 3
# Silence repeating messages
;mute 20
;auth-user-pass //采用用户名密码方式验证,若不用证书的话,可以考虑这种方式,可以结合LDAP或者mysql
route-method exe //windows7上会报错,建议加上此行
route-delay 2 //强行指定添加路由前的延时
auth-nocache //不存储验证缓存
ip-win32 dynamic 0 7200 //设置IP地址过期时间
3.サーバー側の証明書ファイルca.crtopen ***-client.crt open ***-client.keyをconfigディレクトリにコピーします
4.クライアントを起動し、操作がOKかどうかをテストします
クライアントを起動します->ルート管理者として実行します->その時点で設定されているOpen ***-クライアントパスワードを入力します:654321->接続が成功しました(アイコンが緑色に変わります)->テスト-> IEでiptestを入力しますIPアドレスがサーバーのアドレスであるかどうか
1、连接成功时显示日志:
Thu Nov 26 17:01:52 2020 Successful ARP Flush on interface [43] {F09886D2-EE14-4D64-A031-DD6F748763B8}
Thu Nov 26 17:01:52 2020 MANAGEMENT: >STATE:1606381312,ASSIGN_IP,,10.10.0.6,,,,
2、测试本地client端IP地址:在CMD窗口下
C:\Users\Administrator>ipconfig
以太网适配器 VMware Network Adapter VMnet1:
IPv4 地址 . . . . . . . . . . . . : 10.10.0.6 //当时配置的是10.0.0网段的地址
子网掩码 . . . . . . . . . . . . : 255.255.255.252