Edited at

VPS(centos7)にopenvpnを立てる(tun版)


VPS(ntt-pc,webarena)にVPNサーバを立てた。

Raspi0WのOSMCにVPNを立てた

先達のサイト


【サーバ】openvpn-serverのinstall

前述の先達のサイトを参考、省略。cd /etc/openvpn/easy-rsa、以降このディレクトリで作業


ディレクトリ初期化

ディレクトリ /etc/openvpn/easy-rsa/pki が作成される

./easyrsa init-pki


認証局

ca.crt , ca.key が作成される。パスフレーズは電話番号を設定。

./easyrsa build-ca


DHパラメータの作成

dh.pem が作成される

./easyrsa gen-dh


サーバ証明書、秘密鍵

server.crt, server.key が作成される

./easyrsa build-server-full server nopass


クライアント用の証明書と秘密鍵の作成

client1.crt, client1.key が作成される

./easyrsa build-client-full client1 nopass


TLS認証キーの作成

ta.key が作成される

openvpn --genkey --secret /etc/openvpn/ta.key


pkiに作成されたファイルの配置


サーバ

cp -i /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn  

cp -i /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn
cp -i /etc/openvpn/easy-rsa/pki/private/server.key /etc/openvpn
cp -i /etc/openvpn/easy-rsa/pki/issued/server.crt /etc/openvpn


クライアント

cp -i /etc/openvpn/easy-rsa/pki/ca.crt   /etc/openvpn/client 

cp -i /etc/openvpn/easy-rsa/pki/issued/client1.crt /etc/openvpn/client
cp -i /etc/openvpn/easy-rsa/pki/private/client1.key /etc/openvpn/client
cp -i /etc/openvpn/ta.key /etc/openvpn/client


【サーバ】openvpn-server設定ファイル

デフォルトはudp1194ですが、Firewallを通りやすいtcp443で設定します。

cat /etc/openvpn/server.conf | grep -v '^[#;]' | grep -v '^\s*$'


server.conf

port 443

proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0 # VPNクライアントに付与されるアドレス
ifconfig-pool-persist ipp.txt
push "route www.xxx.yyy.zzz 255.255.255.0" # これは不要かも
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS WWW.XXX.YYY.ZZZ"
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0
cipher AES-256-CBC
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
explicit-exit-notify 0

www.xxx.yyy.zzz : VPSのアドレス

WWW.XXX.YYY.ZZZ : VPSのDNSアドレス


【クライアント】VPNクライアント設定ファイル

iPhone用接続アプリOpenVPN Connectは、以下の設定ファイル webarena.ovpnを、iPhoneにメール送付すると、アプリに取り込んでくれる。

このクライアント設定ファイルを作成するシェル。


make_opvn.sh

#!/bin/sh

OVPN=webarena.ovpn # クライアント設定ファイル
CA=/etc/openvpn/client/ca.crt
CLIENTCERT=/etc/openvpn/client/client1.crt
CLIENTKEY=/etc/openvpn/client/client1.key
TLSKEY=/etc/openvpn/client/ta.key

cat << __EOT__ > $OVPN
tls-client
key-direction 1
dev tun
proto udp
port 1194
remote www.xxx.yyy.zzz # VPNサーバのアドレス
cipher AES-256-CBC
__EOT__

echo "<ca>" >> $OVPN
cat $CA >> $OVPN
echo "</ca>" >> $OVPN

echo "<cert>" >> $OVPN
cat $CLIENTCERT >> $OVPN
echo "</cert>" >> $OVPN

echo "<key>" >> $OVPN
cat $CLIENTKEY >> $OVPN
echo "</key>" >> $OVPN

echo "<tls-auth>" >> $OVPN
cat $TLSKEY >> $OVPN
echo "</tls-auth>" >> $OVPN



【サーバ:NAT】iptables(firewall-cmd)の設定


centosでopenvpn用の iptables を firewall-cmd で設定する



  • VPNクライアントからの接続をmasqueradeして、上位IFへ流す

  • firewall-cmdのpublicゾーン:上位IF、trustedゾーン:VPNクライアントからの接続、に設定します


ゾーンの確認

# firewall-cmd --list-all-zones


IPマスカレード設定を追加する


設定

10.8.0.0/24をインタフェース eth0 にマスカレードする

# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE  


確認

# firewall-cmd --permanent --direct --get-all-passthrough 

----
ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# firewall-cmd --permanent --direct --query-passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
----
yes


削除(おまけ)

# firewall-cmd --permanent --direct --remove-passthrough ipv4 -t nat  -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE  

# firewall-cmd --permanent --direct --get-all-passthrough
----
(null)


trustedゾーンにインタフェース、アドレスを紐付け


設定

# firewall-cmd --permanent --zone=trusted --add-interface=tun+

# firewall-cmd --permanent --zone=trusted --add-source=10.8.0.0/24


確認

# firewall-cmd --reload 

# firewall-cmd --list-all-zones
----
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces: ## なぜか表示されません
sources: 10.8.0.0/24 ## これは表示される
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

# firewall-cmd --get-active-zones
---
public
interfaces: eth0
trusted
interfaces: tun+
sources: 10.8.0.0/24