Hyper-VのCentOS7でのブリッジモードのOpenVPNインストール

いやー、長いタイトルだなぁと。。。

自分の課題だった、Hyper-VのCentOS7でブリッジモードのOpenVPNのインストールがやっとできたので、備忘録てきな手順まとめ。。。

・Hyper-Vでの設定
仮想マシンの設定で、「ネットワークアダプター」の「高度の設定」の中の「MACアドレスのスプーフィングを有効にする」にチェックを入れること。
HYPER-V_160525

こうしないと、サーバと同じセグメントに対しての通信ができません。
おまじないとして覚えておきましょう。

・CentOS7の設定
SELinuxは無効にしておきましょう。
Firewalldやiptablesを止めるか、ポートを開けておきましょう。
IPv4 フォワーディングを有効にしておきましょう。

#IPv4 フォワーディングの有効
# vi /etc/sysctl.d/99-sysctl.conf
net.ipv4.ip_forward = 1 ←この行を追加
# service network restart ←ネットワーク再起動

・OpenVPNのインストール
openvpnだけではなく、bridge-utils・easy-rsa・net-toolsもインストールすること。

# yum install openvpn bridge-utils easy-rsa net-tools

・証明書の作成
ここを参照して作成してください。

・設定ファイルの作成
server.confファイルを作成します。

# vi /etc/openvpn/server.conf
#OpenVPN サーバのIPアドレス
local 192.168.0.1
#OpenVPN サーバがリスンするポート(必要があれば変更)
port 1194
#udpでの通信
proto udp
#ブリッジモードとしてtap0を使用※必ずtap0とすること
dev tap0
#証明書のパスを追記して記載
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh2048.pem
# ブリッジ(tap0)に割り当てるIP マスク クライアントに割り当てるIPの範囲
server-bridge 192.168.0.1 255.255.255.0 192.168.0.150 192.168.0.199
#VPNクライアント側にルーティングとDNSサーバの割当
push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.1"
#VPNクライアントへ固定IPアドレスの割り当て設定
client-config-dir ccd
#VPNクライアント間での通信を許可
client-to-client
#以下は環境にあわせて設定
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log
verb 3

・VPNクライアントへ固定IPアドレスの割り当て設定用ディレクトリの作成
“client-config-dir ccd”を設定したので、ディレクトリを作成する。
ディレクトリを作成しないとエラーとなってOpenVPNが起動しない

# mkdir /etc/openvpn/ccd

・ブリッジ設定スクリプトのコピー

# cp /usr/share/doc/openvpn-*/sample/sample-scripts/bridge-st* /etc/openvpn/

・bridge-startの設定

# vi bridge-start
#!/bin/sh
br="br0"
tap="tap0"
eth="eth0" ←自分の環境に合わせて変更
eth_ip="192.168.0.1" ←ブリッジ(tap0)に割り当てるIP
eth_netmask="255.255.255.0" ←ネットマスク
eth_broadcast="192.168.0.255" ←ブロードキャスト
gw="192.168.0.254" ←デフォルトゲートウェイアドレス
for t in $tap; do
    openvpn --mktun --dev $t
done
brctl addbr $br
brctl addif $br $eth
for t in $tap; do
    brctl addif $br $t
done
sleep1 ←おまじないとして追記
for t in $tap; do
    ifconfig $t 0.0.0.0 promisc up
done
sleep 1 ←おまじないとして追記
ifconfig $eth 0.0.0.0 promisc up
ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast
route add default gw $gw ←デフォルトゲートウェイアドレスを設定
ip -6 addr add fd99:9999:9999::1/64 dev br0 ←IPv6アドレスを使用している場合は追記

・bridge-stopの設定

# vi bridge-stop
#!/bin/sh
br="br0"
tap="tap0"
ifconfig $br down
brctl delbr $br
for t in $tap; do
    openvpn --rmtun --dev $t
done
systemctl restart networking ←ネットワーク再起動のおまじない
ip -6 addr add fd99:9999:9999::1/64 dev br0 ←IPv6アドレスを使用している場合は追記

・ブリッジ設定スクリプトに実行権を追加

# chmod +x bridge-st*

・OpenVPN起動・停止時にブリッジ設定スクリプトも実行するように設定

# cp /lib/systemd/system/openvpn@.service /etc/systemd/system/openvpn@.service
# vi /etc/systemd/system/openvpn@.service
[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=network.target

[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStartPre=/etc/openvpn/bridge-start ←追記
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
ExecStopPost=/etc/openvpn/bridge-stop ←追記

[Install]
WantedBy=multi-user.target

・OpenVPNの起動と自動起動設定

# systemctl start openvpn@server ←OpenVPN起動
# systemctl enable openvpn@server ←OpenVPN自動起動

こんな感じでインストールすれば、ブリッジモードで動作してVPNクライアントがサーバと同じセグメントに対しての通信もできるようになるかと。

にほんブログ村 IT技術ブログ CentOSへ

コメント