====== 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