Debian 7におけるOpenVPNサーバーとクライアントのインストールおよび設定
この記事では、Debian Linuxを使用してOpenVPNでIPv6接続を取得する方法について詳述しています。このプロセスは、IPv6接続を持つKVM VPS上のDebian 7で、またDebian 7デスクトップでテストされています。コマンドはルートとして実行される必要があります。
OpenVPNとは何ですか?
OpenVPNは、SSL/TLSを使用して安全かつ暗号化されたVPN接続を作成し、インターネットトラフィックをルーティングするVPNプログラムであり、スヌーピングを防ぎます。OpenVPNは、ファイアウォールを透過的に通過する能力が非常に高いです。実際、状況が要求する場合、HTTPS(443)と同じTCPポートで実行できるため、トラフィックは区別できず、実質的に遮断することが不可能です。
OpenVPN は、クライアントがサーバーに認証するために、プレシェアードシークレットキー、証明書、またはユーザー名/パスワードなど、さまざまな方法を使用できます。OpenVPN は OpenSSL プロトコルを使用し、チャレンジレスポンス認証、シングルサインオン機能、ロードバランシングおよびフェイルオーバー機能、複数デーモンサポートなど、さまざまなセキュリティおよび制御機能を実装しています。
なぜOpenVPNを使用するのですか?
安全な通信を考えるなら、OpenVPNを考えましょう。インターネットトラフィックを誰にも覗かれたくない場合は、OpenVPNを使ってすべてのトラフィックを高度に暗号化された安全なトンネルを通じてルーティングしてください。
これは特に空港やその他の場所で公共のWIFIネットワークに接続する際に重要です。誰があなたのトラフィックを覗き見しているかは決して確信できません。覗き見を防ぐために、トラフィックを自分のOpenVPNサーバー経由にすることができます。
もしあなたがすべてのトラフィックを常時監視し、任意でウェブサイトをブロックする国のいずれかにいる場合、OpenVPNをTCPポート443経由で使用することで、HTTPSトラフィックと区別できなくすることができます。さらに、OpenVPNトラフィックをSSLトンネルを経由してトンネリングするなど、他のセキュリティ戦略と組み合わせることもでき、OpenVPNのシグネチャを識別できる可能性のあるディープパケット検査技術に打ち勝つことができます。
システム要件
OpenVPNは、非常に最低限の要件で動作します。64 MBのRAMと1 GBのHDDスペースを持つシステムでOpenVPNを実行するのに十分です。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-rsaCA証明書と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ビットの鍵を使用しています。必要に応じて、1024、2048、4096、または8192ビットの鍵を使用できます。
コマンドを実行してデフォルト値をエクスポートします。
# source ./vars以前に生成された証明書をクリーンアップしてください。
./clean-all
次に、以下のコマンドを実行してCA証明書とCAキーを生成します。
# ./build-caコマンドを実行してサーバー証明書を生成します。'サーバー名'をあなたのサーバー名に置き換えてください。
# ./build-key-server server-nameDiffie Hellman PEM証明書を生成します。
# ./build-dhクライアント証明書を生成します。‘クライアント名’をあなたのクライアント名に置き換えてください。
# ./build-key client-nameHMACコードを生成する。
# openvpn --genkey --secret /root/easy-rsa/keys/ta.key証明書をクライアントとサーバーのマシンに次のようにコピーします。
- ca.crt がクライアントとサーバーの両方に存在することを確認してください。
- その ca.key キーはクライアントにあるべきです。
- サーバーにはserver.crt、dh4096.pem、server.key、およびta.keyが必要です。
- client.crt、client.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 restartOpenVPNがIPv4で正常に動作していることに満足したら、次にIPv6をOpenVPNで動作させる方法を説明します。
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に接続するたびに、このスクリプトはサーバーのtap0インターフェースにIPv6アドレス2a00:dd80:003d:000c:1001::1を割り当てます。
最後の行は、トンネルのために隣接ノード発見を設定します。クライアント側の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ルートを設定します。
サーバー設定で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 ホームページ
出典: stavrovski
