前回はCentOS6でVPNルーターを作ってみましたが、今回はCentOS7で同じようにVPNルーターを構築してみたいと思います。今回も環境はさくらのクラウドです。ネットワーク構成は以下になります。
■ eth1 IPアドレス追加
さくらのクラウドでNICを追加すると、eth1としてアタッチされますが、IPアドレスは自分で付与する必要があります。RHEL7(CentOS7)からは、設定ファイルの直接編集は推奨されていないようなので、nmcliコマンドで設定を追加します。
$ ip a show dev eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 9c:a3:ba:21:0a:9c brd ff:ff:ff:ff:ff:ff inet6 fe80::9ea3:baff:fe21:a9c/64 scope link valid_lft forever preferred_lft forever
$ sudo nmcli c add type eth ifname eth1 con-name eth1 接続 'eth1' (1a4667c0-2ee5-4084-8141-6dbf244af051) が正常に追加されました。
$ sudo nmcli c mod eth1 ipv4.method manual ipv4.addresses "10.0.0.10/8"
$ sudo nmcli c up eth1 接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/2)
$ ip a show dev eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 9c:a3:ba:21:0a:9c brd ff:ff:ff:ff:ff:ff inet 10.0.0.10/8 brd 10.255.255.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::9ea3:baff:fe21:a9c/64 scope link valid_lft forever preferred_lft forever
■ PPTPサーバー インストール
・ パッケージ検索
CentOS7はデーモンの起動にsystemdを使うのですが、serviceコマンドでpptpdを起動したい人のために pptpd-sysvinit というパッケージも用意されています。
$ yum list | grep pptp pptp.x86_64 1.7.2-22.el7 base pptp-setup.x86_64 1.7.2-22.el7 base pptpd.x86_64 1.4.0-2.el7 epel pptpd-sysvinit.noarch 1.4.0-2.el7 epel
予想通り、yum info pptpd-sysvinit してみると「The SysV initscript for PoPToP Point to Point Tunneling Server.」とのことでした。
・ パッケージインストール
今回はpptpdとpptpd-sysvinitをインストールすることにします。
$ sudo yum install pptpd pptpd-sysvinit
■ PPTPサーバー 設定
・ /etc/pptpd.conf 編集
自分自身のIPアドレスと、VPNクライアントに配布するIPアドレスの範囲を指定します。
$ sudo cp -p /etc/pptpd.conf{,.orig} $ cat << _EOL_ | sudo tee -a /etc/pptpd.conf localip 10.0.0.10 remoteip 10.0.0.231-240 _EOL_
・ /etc/ppp/chap-secrets 編集
VPNクライアントが使うアカウントを、以下のパラメーターで設定します。
アカウント名: nullpopopo
パスワード: P@sSw0rD
$ sudo cp -p /etc/ppp/chap-secrets{,.orig} $ echo "nullpopopo pptpd P@sSw0rD *" | \ awk '{print $1"\t"$2"\t"$3"\t"$4}' | \ sudo tee -a /etc/ppp/chap-secrets
・ /etc/ppp/options.pptpd 編集
ms-dns 133.242.0.3 ms-dns 133.242.0.4
の2行を、以下のコマンドで追記します。
$ sudo cp -p /etc/ppp/options.pptpd{,.orig} $ echo 133.242.0.{3,4} | sed -e 's/[[:space:]]/\n/g' | \ sed -e 's/^/ms-dns /g' | sudo tee -a /etc/ppp/options.pptpd
■ pptpd起動
以下のコマンドでpptpdを起動します。
$ sudo systemctl enable pptpd.service $ sudo systemctl start pptpd
■ パケット転送許可
CentOSのカーネルパラメーターは、デフォルトでパケット転送を拒否しています。以下のコマンドで値が0になっています。
$ sudo sysctl -a | grep net.ipv4.ip_forward net.ipv4.ip_forward = 0
このままでは、次の手順 NAT設定を行ってもうまく通信できないのでパケット転送を許可してあげることにしますが、今までのsysctl.conf編集→sysctlコマンドでの反映とは手順がちょっと変わっています。
・ /etc/sysctl.d/10-ipv4.conf にパケット転送許可設定を書く(新規ファイル)
$ echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/10-ipv4.conf
・ sysctlコマンドで反映させる
$ sudo sysctl -p /etc/sysctl.d/10-ipv4.conf net.ipv4.ip_forward = 1
・ 反映されていることを確認する
$ sudo sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1
■ firewalldのNATルール作成
さくらのクラウドはfirewalldが動いていないので、まずは動かします。
$ sudo systemctl start firewalld.service $ sudo systemctl enable firewalld.service
次に、eth0とeth1がどのゾーンに属しているか確認します。
$ sudo firewall-cmd --get-active-zones public interfaces: eth0 eth1
eth0、eth1ともにpublicゾーンに属しています。それではpublicゾーンの設定を確認してみましょう。
$ sudo firewall-cmd --list-all --zone=public public (default, active) interfaces: eth0 eth1 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
上記のように、まだ「masquerade: no」となっています。
・ IPマスカレード設定を追加する
$ sudo firewall-cmd --zone=public --add-masquerade success $ sudo firewall-cmd --permanent --zone=public --add-masquerade success
それでは再度publicゾーンの設定を確認してみましょう。
$ sudo firewall-cmd --list-all --zone=public public (default, active) interfaces: eth0 eth1 sources: services: dhcpv6-client ssh ports: masquerade: yes forward-ports: icmp-blocks: rich rules:
上記のように「masquerade: no」が「masquerade: yes」に変わりました。以下のコマンドでも確認することができます。
$ sudo firewall-cmd --zone=public --query-masquerade yes
NATルールの作成と、もう1つ、PPTPが使用するTCP1723番ポートの穴あけも行います。
$ sudo firewall-cmd --zone=public --add-port=1723/tcp $ sudo firewall-cmd --zone=public --add-port=1723/tcp --permanent
以上の設定で、PPTPクライアントからPPTPサーバーに繋がるようになりました。VPNクライアントから接続し、デフォルトゲートウェイをPPTPサーバーに向けて確認してみましょう。
$ ping 10.0.0.10 PING 10.0.0.10 (10.0.0.10) 56(84) bytes of data. 64 bytes from 10.0.0.10: icmp_seq=1 ttl=63 time=42.9 ms
$ traceroute -n 10.0.0.20 traceroute to 10.0.0.20 (10.0.0.20), 30 hops max, 60 byte packets 1 10.0.0.10 24.283 ms 25.557 ms 26.326 ms 2 10.0.0.20 27.183 ms 27.892 ms 28.304 ms
こんな感じでPPTPサーバー、10.0.0.0/8につながっている他ノードにつながればOKです。また、インターネットに出られることも確認しましょう。
以上です。ね、簡単でしょう?
[amazonjs asin="4798121770" locale="JP" title="DVD付 CentOS徹底入門 第3版"]