VPNまたは仮想プライベートネットワークは、インターネットなどのパブリックネットワークを介した安全なプライベートネットワークです。 VPNは、インターネットを介した安全なトンネルであり、データトラフィックを保護し、インターネットのプライバシーとセキュリティを強化します。 VPNへのアクセスは、安全な認証方法によって制限されています。
OpenVPNは、仮想プライベートネットワークを構築するためのオープンソースソフトウェアであり、OpenSSLライブラリを使用してトンネリングされたデータを暗号化し、UDPまたはTCPトランスポートをサポートします。 OpenVPNは、事前共有キー、証明書ベース、およびユーザー名/パスワードベースの認証メカニズムを使用できます。
このチュートリアルでは、LinuxオペレーティングシステムOpenSUSELeap42.1でOpenVPNvpnを使用して仮想プライベートネットワークを実装する方法を紹介します。
前提条件
- OpenSUSELeap42.1-64ビット
- root権限
- TUN/TAPが有効
サーバーにVPNを作成する場合は、TUN/TAPがインストールされ有効になっていることを確認してください。以下のコマンドで確認できます:
cat /dev/net/tun
結果は次のようになります:
cat: /dev/net/tun: File descriptor in bad state
OpenVPNはOpenSUSEリポジトリで利用できます。 zypperコマンドを使用してインストールできます:
zypper in openvpn
次に、easy-rsaをダウンロードして証明書ファイルを生成します。 easy-rsaは証明書を管理するためのユーティリティであり、それを使用してルート認証局を作成し、証明書を要求して署名することができます。
OpenVPNディレクトリに移動し、wgetコマンドを使用してeasy-rsaをダウンロードします。
cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
アーカイブを抽出し、easy-rsaディレクトリを移動します:
unzip 2.x.zip
mv easy-rsa-release-2.x/easy-rsa/ /etc/openvpn/
rm -rf easy-rsa-release-2.x/
キーを構成する
easy-rsaディレクトリに移動し、varsファイルを編集して、キーと証明書を構成します。
cd easy-rsa/2.0/
vim vars
53行目-本当にパラノイアの場合は、キーサイズを大きくすることができます。
export KEY_SIZE=2048
56行目と59行目-キーと証明書の有効期限が切れる日数。
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
64行目-72行目-キーと証明書情報のデフォルト値を変更します。
export KEY_COUNTRY="US"
export KEY_PROVINCE="California"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]main"
export KEY_OU="MyOrganizationalUnit"
export KEY_NAME="EasyRSA"
ファイルを保存して終了します。
PKIを初期化する
次に、PKI(公開鍵インフラストラクチャ)を初期化します。
source ./vars && ./clean-all && ./build-ca
「Enter」を押すだけで、デフォルト値のままにします。
DiffieHellmanパラメーターを生成する
以下のコマンドを実行します:
./build-dh
出力が表示されます:
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..................................
サーバー秘密鍵を生成する
「server」という名前の秘密鍵を生成します:
./build-key-server server
Enterキーを押し、「y」と入力して確認し、キーを生成します。
クライアントのキーと証明書を生成する
「client1」という名前のクライアントキーと証明書を生成します:
./build-key client1
Enterキーを押し、「y」と入力してキーの生成を確認します。
キーと証明書は、ディレクトリ「keys」に生成されています。次に、「keys」ディレクトリのコピーを作成し、「openvpn」ディレクトリに配置します。
cp -r keys/ /etc/openvpn/
このステップでは、クライアント接続にポート2034を使用して、UDPプロトコルで実行するようにOpenVPNを構成します。 OpenVPNディレクトリに新しい構成ファイルserver.confを作成します。
cd /etc/openvpn/
vim server.conf
以下に設定を貼り付けます:
#change with your port
port 2034
#You can use udp or tcp
proto udp
# "dev tun" will create a routed IP tunnel.
dev tun
#Certificate Configuration
#ca certificate
ca /etc/openvpn/keys/ca.crt
#Server Certificate
cert /etc/openvpn/keys/server.crt
#Server Key and keep this is secret
key /etc/openvpn/keys/server.key
#See the size a dh key in /etc/openvpn/keys/
dh /etc/openvpn/keys/dh2048.pem
#Internal IP will get when already connect
server 10.10.2.0 255.255.255.0
#this line will redirect all traffic through our OpenVPN
push "redirect-gateway def1"
#Provide DNS servers to the client, you can use goolge DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Enable multiple client to connect with same key
duplicate-cn
keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon
#openvpn status log
status /var/log/openvpn/openvpn-status.log
#enable log
log-append /var/log/openvpn/openvpn.log
#Log Level
verb 3
ファイルを保存してエディタを終了します。
次に、openvpnログ用の新しいディレクトリとファイルを作成します:
mkdir -p /var/log/openvpn/
touch /var/log/openvpn/{openvpn,openvpn-status}.log
SuSEfirewall2は、ファイル「/ etc / sysconfig/SuSEfirewall2」に基づいてiptablesルールを生成するためのスクリプトです。 SuSEfirewall2をインストールし、OpenVPNにアクセスするようにポートを構成してから、OpenVPNのiptablesスクリプトを使用してNATを有効にします。
zypperコマンドを使用してSuSEfirewall2をインストールします。
zypper in SuSEfirewall2
次に、sysconfigディレクトリに移動し、SuSEfirewall2構成ファイルを編集します。
cd /etc/sysconfig/
vim SuSEfirewall2
134行目-ルートを有効にします。
FW_ROUTE="yes"
253行目-ネットワーク外部からのSSHアクセス用にTCPポート22を有効にします。
FW_SERVICES_EXT_UDP="22"
267行目-openvpnクライアントアクセス用にudpポートを有効にします-ポート2034。
FW_SERVICES_EXT_UDP="2034"
877行目-カスタムルールSuSEfirewall2を有効にします。
FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"
保存して終了します。
次に、scriptsディレクトリでSuSEfirewall2カスタムルールを編集します。
cd /etc/sysconfig/scripts/
vim SuSEfirewall2-custom
「fw_custom_after_chain_creation」ディレクティブ内に、OpenVPNの新しいiptablesルールを貼り付けます。
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.10.2.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.10.2.0/24 -o eth0 -j MASQUERADE
保存して終了します。
注:
IP 10.10.2.0/24は、server.confOpenVPN構成ファイルからのネットワークです。
これで、この新しい構成行をsysctl.confファイルに追加することで転送を有効にできます。
vim /etc/sysctl.conf
以下に構成を貼り付けます:
net.ipv4.ip_forward = 1
保存して終了します。
注:
ファイルにすでに行がある場合は、新しい行を追加するのではなく、値を「0」から「1」に変更します。
次に、以下のコマンドを実行して、構成の変更を適用します。
sysctl -p
SuSEfirewall2とOpenVPNサーバーを起動します:
systemctl start SuSEfirewall2
systemctl start [email protected]
エラーが発生した場合は、OpenVPNログに詳細なエラーメッセージが表示されます。
システムのスタートアップにすべてのサービスを追加します:
systemctl enable SuSEfirewall2
systemctl enable [email protected]
クライアントキーと証明書をkeysディレクトリからローカルコンピュータにダウンロードします。あなたはscpコマンドまたはsftpを使うことができます、私はここでscpを使っています:
ローカルコンピューターで実行する必要のあるコマンド。
scp [email protected]:~/etc/openvpn/keys/ca.crt ~/myvpn/
scp [email protected]:~/etc/openvpn/keys/client1.crt ~/myvpn/
scp [email protected]:~/etc/openvpn/keys/client1.key ~/myvpn/
myvpnディレクトリに、クライアント「client1.ovpn」の新しい構成ファイルを作成します。
cd ~/myvpn/
vim client1.ovpn
以下に設定を貼り付けます:
client
dev tun
proto udp
#Server IP and Port
remote SERVERIP 2034
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
保存して終了します。
VPNに接続するには、VPNクライアントをインストールするか、Linuxを使用している場合は「Network-Manager」を使用できます。ターミナルを使用してVPNをテストする場合は、次のコマンドを使用できます。
cd ~/myvpn/
sudo openvpn --config client1.ovpn