====== 61 CentOS OpenVPNトンネル接続 ======
事前に [[01_linux:01_net:60_centos_openvpn|]] の事前準備が完了している前提です。
===== ①設定ファイル修正 =====
# vi /etc/openvpn/server.conf
port 1194
dev tun ← VPNインタフェースとしてTUNを指定(デフォルト)
server 10.8.0.0 255.255.255.0 ← VPNクライアント割当てアドレス範囲として10.8.0.0/24を指定(デフォルト)
push "route 192.168.1.0 255.255.255.0" ← 追加(LAN(例:192.168.1.0/24)へのルートをVPNサーバー経由にする)
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
tls-auth ta.key 0 # This file is secret ← 行頭の;を削除してコメント解除(TLS認証有効化)
user nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる)
group nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる)
client-to-client
log-append /var/log/openvpn.log ← 行頭の;を削除してコメント解除(ログを/var/log/openvpn.logに記録する)
crl-verify /etc/openvpn/crl.pem
management localhost 7505 ← 最終行へ追加(管理インタフェースの有効化※後述)
===== ②OpenVPN用スクリプト用意 =====
==== 1.起動時用 ====
# vi /etc/openvpn/openvpn-startup
#!/bin/bash
# VPNインタフェースiptablesルール削除スクリプト実行※必須
/etc/openvpn/openvpn-shutdown
# VPNサーバーからの送信を許可※必須
#iptables -I OUTPUT -o tun+ -j ACCEPT
#iptables -I FORWARD -o tun+ -j ACCEPT
# VPNクライアントからVPNサーバーへのアクセスを許可する場合
#iptables -I INPUT -i tun+ -j ACCEPT
# VPNクライアントからLANへのアクセスを許可する場合
# (例としてVPNクライアントから192.168.1.0/24へのアクセスを許可する場合)
# ※192.168.1.0/24側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること
iptables -I FORWARD -i tun+ -d 172.18.0.0/24 -j ACCEPT
# VPNクライアントからLAN内特定マシンのみへのアクセスを許可する場合
# (例としてVPNクライアントから192.168.1.3へのアクセスを許可する場合)
# ※192.168.1.3側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること
#iptables -I FORWARD -i tun+ -d 192.168.1.3 -j ACCEPT
# VMなどでFORWADが許可されてない場合、ソースNATを利用すると問題無し
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 192.168.1.0/24 -o eth1 -j SNAT --to-source 192.168.1.3
==== 2.停止時用 ====
# cat /etc/openvpn/openvpn-shutdown
#!/bin/bash
# VPNインタフェース(tun+)用iptablesルール削除関数
delete() {
rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r`
for num in $rule_number
do
iptables -D $target $num
done
}
# VPNインタフェース(tun+)用iptables受信ルール削除
target='INPUT'
delete
# VPNインタフェース(tun+)用iptables転送ルール削除
target='FORWARD'
delete
# VPNインタフェース(tun+)用iptables送信ルール削除
target='O