ウェブサイト検索

Debian 7 での OpenVPN サーバーとクライアントのインストールと構成


この記事では、Debian Linux を使用してOpenVPNIPv6 接続を取得する方法について詳しく説明します。このプロセスは、サーバーとしてIPv6接続を備えたKVM VPS上のDebian 7とDebian 7デスクトップでテストされています。コマンドは root として実行します。

OpenVPNとは何ですか?

OpenVPN は、SSL/TLS を使用して安全な暗号化された VPN 接続を作成し、インターネット トラフィックをルーティングして、スヌーピングを防止する VPN プログラムです。オープン VPN は、ファイアウォールを透過的に通過する高度な機能を備えています。実際、状況に応じて必要な場合は、HTTPS (443) と同じ TCP ポートで実行でき、トラフィックを区別できなくなり、事実上ブロックできなくなります。

OpenVPN は、事前共有秘密キー、証明書、ユーザー名/パスワードなどのさまざまな方法を使用して、クライアントがサーバーに対して認証できるようにします。 OpenVPN は OpenSSL プロトコルを使用し、チャレンジ レスポンス認証、シングル サインオン機能、負荷分散およびフェイルオーバー機能、マルチ デーモン サポートなどの多くのセキュリティおよび制御機能を実装します。

OpenVPN を使用する理由

安全な通信について考えてみましょう – OpenVPN について考えてみましょう。インターネット トラフィックを他人に覗き見されたくない場合は、OpenVPN を使用して、高度に暗号化された安全なトンネルを介してすべてのトラフィックをルーティングします。

これは、空港やその他の場所で公衆 WIFI ネットワークに接続する場合に特に重要です。誰があなたのトラフィックを覗き見しているのかを確信することはできません。トラフィックを独自の OpenVPN サーバー経由でチャネルして、スヌーピングを防ぐことができます。

すべてのトラフィックを定期的に監視し、Web サイトを自由にブロックしている国のいずれかにお住まいの場合は、TCP ポート 443 経由で OpenVPN を使用して、HTTPS トラフィックと区別できなくすることができます。 OpenVPN を、SSL トンネル経由で OpenVPN トラフィックをトンネリングするなどの他のセキュリティ戦略と組み合わせて、OpenVPN 署名を識別できる可能性のあるディープ パケット インスペクション技術を打ち破ることもできます。

システム要求

OpenVPN を実行するには最小限の要件が必要です。 OpenVPN を実行するには、64 MB RAM1 GB HDD スペースを備えたシステムで十分です。 OpenVPN は、ほとんどすべての主流オペレーティング システム上で動作します。

Debian 7 での OpenVPN のインストールと構成

マスターサーバーに OpenVPN をインストールする

次のコマンドを実行して OpenVPN をインストールします。

apt-get install openvpn

デフォルトでは、easy-rsa スクリプトは「/usr/share/easy-rsa/」ディレクトリにインストールされます。したがって、これらのスクリプトを目的の場所、つまり /root/easy-rsa にコピーする必要があります。

mkdir /root/easy-rsa
cp -prv /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/easy-rsa

CA証明書とCAキーを生成する

ファイル「vars」を開いて次の変更を加えますが、変更を加える前に、元のファイルのバックアップを取ることをお勧めします。

cp vars{,.orig}

テキスト エディタを使用して、easy-rsa のデフォルト値を設定します。例えば。

KEY_SIZE=4096
KEY_COUNTRY="IN"
KEY_PROVINCE="UP"
KEY_CITY="Noida"
KEY_ORG="Home"
KEY_EMAIL="[email "

ここでは4096 ビットのキーを使用しています。必要に応じて、102420484096、または 8192 ビット キーを使用できます。

コマンドを実行してデフォルト値をエクスポートします。

source ./vars

以前に生成された証明書をクリーンアップします。

./clean-all

次に、次のコマンドを実行してCA証明書とCAキーを生成します。

./build-ca

コマンドを実行してサーバー証明書を生成します。 「サーバー名」を実際のサーバー名に置き換えます。

./build-key-server server-name

Diffie Hellman PEM 証明書を生成します。

./build-dh

クライアント証明書を生成します。 「クライアント名」をクライアント名に置き換えます。

./build-key client-name

HMAC コードを生成します。

openvpn --genkey --secret /root/easy-rsa/keys/ta.key

次のように、証明書をクライアント マシンとサーバー マシンにコピーします。

  1. ca.crt がクライアントとサーバーの両方に存在することを確認します。
  2. ca.key キーはクライアント上にある必要があります。
  3. サーバーにはserver.crtdh4096.pemserver.key、およびta.keyが必要です。
  4. client.crtclient.key、および ta.key はクライアント上にある必要があります。

サーバー上にキーと証明書を設定するには、コマンドを実行します。

mkdir -p /etc/openvpn/certs
cp -pv /root/easy-rsa/keys/{ca.{crt,key},server-name.{crt,key},ta.key,dh4096.pem} /etc/openvpn/certs/

OpenVPN サーバーの構成

次に、OpenVPN サーバーを構成する必要があります。ファイル「/etc/openvpn/server.conf」を開きます。以下の説明に従って変更してください。

script security 3 system
port 1194
proto udp
dev tap

ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server-name.crt
key /etc/openvpn/certs/server-name.key
dh /etc/openvpn/certs/dh4096.pem
tls-auth /etc/openvpn/certs/ta.key 0

server 192.168.88.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 1800 4000

cipher DES-EDE3-CBC # Triple-DES
comp-lzo

max-clients 10

user nobody
group nogroup

persist-key
persist-tun

#log openvpn.log
#status openvpn-status.log
verb 5
mute 20

サーバー上で IP 転送を有効にします。

echo 1 > /proc/sys/net/ipv4/ip_forward

次のコマンドを実行して、起動時に OpenVPN が開始されるように設定します。

update-rc.d -f openvpn defaults

OpenVPNサービスを開始します。

service openvpn restart

クライアントに OpenVPN をインストールする

次のコマンドを実行して、クライアント マシンに OpenVPN をインストールします。

apt-get install openvpn

テキスト エディタを使用して、クライアント上の「/etc/openvpn/client.conf」に OpenVPN クライアント構成をセットアップします。構成例は次のとおりです。

script security 3 system
client
remote vpn_server_ip
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/client.crt
key /etc/openvpn/certs/client.key
cipher DES-EDE3-CBC
comp-lzo yes
dev tap
proto udp
tls-auth /etc/openvpn/certs/ta.key 1
nobind
auth-nocache
persist-key
persist-tun
user nobody
group nogroup

次のコマンドを実行して、起動時に OpenVPN が開始されるように設定します。

update-rc.d -f openvpn defaults

クライアント上で OpenVPN サービスを開始します。

service openvpn restart

OpenVPN がIPv4上で正常に動作することに満足したら、次は OpenVPN 上でIPv6を動作させる方法を示します。

サーバー上の OpenVPN で IPv6 を動作させる

サーバー設定「/etc/openvpn/server.conf」ファイルの末尾に次の行を追加します。

client-connect /etc/openvpn/client-connect.sh
client-disconnect /etc/openvpn/client-disconnect.sh

これら 2 つのスクリプトは、クライアントが接続/切断するたびにIPv6 トンネルを構築/破棄します。

client-connect.sh の内容は次のとおりです。

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
ifconfig $dev up
ifconfig $dev add ${BASERANGE}:1001::1/64
ip -6 neigh add proxy 2a00:dd80:003d:000c:1001::2 dev eth0
exit 0

ホストは私に 2a00:dd80:003d:000c::/64 ブロックから IPV6 アドレスを割り当てます。そこで私が
使っているのは。 2a00:dd80:003d:000c を BASERANGE として指定します。ホストが割り当てた値に従ってこの値を変更します。

クライアントが OpenVPN に接続するたびに、このスクリプトはアドレス 2a00:dd80:003d:000c:1001::1tap0< の IPV6 アドレスとして割り当てます。 サーバーのインターフェイス。

最後の行では、トンネルの近隣探索を設定します。クライアント側のtap0接続のIPv6アドレスをプロキシ アドレスとして追加しました。

client-disconnect.sh の内容は次のとおりです。

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
/sbin/ip -6 addr del ${BASERANGE}::1/64 dev $dev
exit 0

これにより、クライアントが切断されたときにサーバーのIPv6 トンネル アドレスが削除されるだけです。必要に応じて、BASERANGE の値を変更します。

スクリプトを実行可能にします。

chmod 700 /etc/openvpn/client-connect.sh
chmod 700 /etc/openvpn/client-disconnect.sh

次のエントリを「/etc/rc.local」に追加します (/etc/sysctl.conf で適切な sysctl を変更することもできます)。

echo 1 >/proc/sys/net/ipv6/conf/all/proxy_ndp
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
/etc/init.d/firewall stop && /etc/init.d/firewall start

これらのエントリは、近隣探索と転送を有効にします。ファイアウォールも追加しました。

/etc/init.d/firewall」を作成し、次の内容を入力します。

#!/bin/sh
description: Firewall
IPT=/sbin/iptables
IPT6=/sbin/ip6tables
case "$1" in
start)
$IPT -F INPUT
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i eth0 -p icmp -j ACCEPT
$IPT -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
$IPT -A INPUT -i tap+ -j ACCEPT
$IPT -A FORWARD -i tap+ -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -F POSTROUTING
$IPT -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
$IPT -A INPUT -i eth0 -j DROP
$IPT6 -F INPUT
$IPT6 -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT6 -A INPUT -i eth0 -p icmpv6 -j ACCEPT
$IPT6 -A FORWARD -s 2a00:dd80:003d:000c::/64 -i tap0 -o eth0 -j ACCEPT
$IPT6 -A INPUT -i eth0 -j DROP
exit 0
;;
stop)
$IPT -F
$IPT6 -F
exit 0
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac

「/etc/rc.local」を実行し、ファイアウォールを起動します。

sh /etc/rc.local

これでサーバー側の変更は完了です。

クライアント上の OpenVPN で IPv6 を動作させる

クライアント設定ファイル「/etc/openvpn/client.conf」の最後の行として次の行を追加します。

create the ipv6 tunnel
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
need this so when the client disconnects it tells the server
explicit-exit-notify

アップおよびダウン スクリプトは、クライアントが OpenVPN サーバーに接続または切断するたびに、クライアント Tap0 接続の IPV6 クライアント エンドポイントを構築または破棄します。

up.shの内容は以下の通りです。

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
ifconfig $dev up
ifconfig $dev add ${IPV6BASE}:1001::2/64
ip -6 route add default via ${IPV6BASE}:1001::1
exit 0

このスクリプトは、IPV6 アドレス 2a00:dd80:3d:c:1001::2 をクライアント IPV6 アドレスとして割り当て、サーバーを経由するデフォルトの IPV6 ルートを設定します。

IPV6BASE をサーバー構成の BASERANGE と同じになるように変更します。

以下が down.sh の内容です。

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
/sbin/ip -6 addr del ${IPV6BASE}::2/64 dev $dev
/sbin/ip link set dev $dev down
/sbin/ip route del ::/0 via ${IPV6BASE}::1
exit 0

これにより、クライアントの IPV6 アドレスが削除され、クライアントがサーバーから切断されたときに IPV6 ルートが破棄されるだけです。

IPV6BASE をサーバー構成の BASERANGE と同じになるように変更し、スクリプトを実行可能にします。

chmod 700 /etc/openvpn/up.sh
chmod 700 /etc/openvpn/down.sh

必要に応じて、「/etc/resolv.conf」を変更し、DNS 解決用の Google の IPV6 ネームサーバーを追加します。

nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

サーバー上で openvpn を再起動し、クライアントからそれに接続します。つながっているはずです。 test-ipv6.com にアクセスして、OpenVPN 経由の IPV6 接続が機能していることを確認します。

参考リンク

OpenVPN ホームページ

出典: スタブロフスキー