2019年5月20日月曜日

VPN サーバーの構築(SoftEther)

インターネット経由で自宅 LAN にアクセスできるように
SoftEther で VPN サーバーを構築する。

ソフトウェアダウンロード
https://www.softether-download.com/ja.aspx?product=softether

インストール方法は下記公式サイトを参照

9.3 Linux へのインストールと初期設定
https://ja.softether.org/4-docs/1-manual/9/9.3

必要なソフトウェア、ライブラリを確認したところ、
gcc が必要と判明したため、gcc のパッケージを追加でインストール
# yum install gcc

pthread ライブラリのパッケージがインストールされていることを
確認できなかったが、glibc に含まれているとのことだった。

【不明点】Linux(RHEL7.4)にpthread ライブラリがなくても大丈夫でしょうか?
https://www.vpnusers.com/viewtopic.php?p=84605&sid=2e81576cfd35ce9413211e7a962ff4f5


インストール後の初期設定は Windows からだと GUI で行えるようなので、
Windows にインストールした管理ツールから VPN サーバーに接続できるよう
TCP ポートの 443 を開放する。(VPN サーバーは CUI での運用)

7.4 初期設定
https://ja.softether.org/4-docs/1-manual/7/7.4

また、VPN 接続用のポート UDP 500、4500 も同時に開放する。
(L2TP over IPsec、EtherIP over IPsec を使用する場合)

VPN サービス用の Firewall 設定ファイルを追加する。
# vi /etc/firewalld/services/vpnserver.xml

<?xml version="1.0" encoding="utf-8"?>
  <service>
    <short>VPN</short>
    <description>SoftEther VPN</description>
    <port protocol="tcp" port="443"/>
    <port protocol="udp" port="500"/>
    <port protocol="udp" port="4500"/>
</service>

設定ファイルを読み込ませる
# firewall-cmd --reload

XML ファイルに記載したサービス名を指定して、常時ポート開放するように設定する
# firewall-cmd --permanent --zone=public --add-service=vpnserver

設定を有効化する
# firewall-cmd --reload

これでファイアウォールが開放され、Windows の管理ツールから接続できた。

VPN サーバーの初期設定

IP アドレス、ポート番号 443 を指定して、接続
初回接続時は VPN サーバーの管理者パスワードの設定を求められる。



リモートアクセス VPN サーバーにチェックを入れ、OK


「はい」をクリック

仮想 HUB 名を設定
ethernet.net が提供する DDNS への登録
ここで登録されるホスト名でインターネット経由 でアクセスすることが可能になる

iPhone などからもアクセスできるよう L2TP over IPSec にチェック

VPN Azure クラウドは今回使用しないため、無効にする。

最後にルータ側で UDP 500, 4500 を VPN サーバーにフォワードする設定を行い、
インターネット経由で VPN 接続できるようになったことを確認した。

なお、ファイアウォールと SELinux については以下の記載があったのだが、
いずれも有効なままでインストールを完了することができた。

https://ja.softether.org/4-docs/1-manual/7/7.3
ファイアウォール機能や SELinux 機能などは、無効の状態でインストールを完了させてください。これらの機能は、VPN Server が正しくインストールできたことを確認してから必要な場合のみ有効にしてください。

2019年5月9日木曜日

No-IP(DDNS) にグローバル IP を自動登録する設定

インターネット経由で自宅サーバーにアクセスするため、
DDNS(No-IP) にグローバル IP を登録する。

クライアントツールと手順は No-IP のサイトを参照。

Dynamic DNS Update Client for Linux
https://www.noip.com/download?page=linux

How to Install the Dynamic Update Client on Linux
https://www.noip.com/support/knowledgebase/installing-the-linux-dynamic-update-client/

クライアントツールのインストール
# cd /usr/local/src
# wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
# tar xzf noip-duc-linux.tar.gz
# cd no-ip-2.1.9
# make
# make install

設定ファイルの作成
# /usr/local/bin/noip2 -C
--------------------------------
Auto configuration for Linux client of no-ip.com.

Please enter the login/email string for no-ip.com  email@example.com
Please enter the password for user 'email@example.com'  ********

Only one host [example.com] is registered to this account.
It will be used.
Please enter an update interval:[30]
Do you wish to run something at successful update?[N] (y/N)

New configuration file '/usr/local/etc/no-ip2.conf' created.
--------------------------------

クライアントツールの起動
# /usr/local/bin/noip2

と、これで動作はするのだが、サービスとして OS に登録されていないため、
systemd のユニットファイルを作成する。

# vi /etc/systemd/system/noip2.service
--------------------------------
[Unit]
Description=No-IP update daemon
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/noip2
Restart=always
Type=forking

[Install]
WantedBy=multi-user.target
--------------------------------

自動起動 ON
# systemctl enable noip2

サービス起動
# systemctl start noip2

Systemdを使ってさくっと自作コマンドをサービス化してみる

ユニットファイルを作成する際にはまったのが、以下のエラー。
------------------------------------------------------
# systemctl status noip2
● noip2.service - No-IP update daemon
   Loaded: loaded (/etc/systemd/system/noip2.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Fri 2019-04-26 07:40:58 JST; 2min 10s ago
  Process: 3404 ExecStart=/usr/local/bin/noip2 (code=exited, status=0/SUCCESS)
 Main PID: 3404 (code=exited, status=0/SUCCESS)

Apr 26 07:40:57 localhost.localdomain systemd[1]: Started No-IP update daemon.
Apr 26 07:40:57 localhost.localdomain noip2[3407]: v2.1.9 daemon started with NAT enabled
Apr 26 07:40:57 localhost.localdomain noip2[3407]: Can't gethostbyname for dynupdate.no-ip.com
Apr 26 07:40:57 localhost.localdomain noip2[3407]: Can't get our visible IP address from ip1.dynupdate.no-ip.com
------------------------------------------------------

ネットワーク接続後に noip2 サービスを起動するよう
ユニットファイルで依存関係、起動順序を定義することで解消できた。

Wants=network-online.target
After=network-online.target

以下のサイトが参考になりました。

systemdで確実にネットワークの起動後にサービスを起動させたい場合のメモ
https://kernhack.hatenablog.com/entry/2014/09/20/110938
https://qiita.com/yunano/items/8636a6dd6becad84920d

と、グローバル IP が更新されても、DDNS のレコードは自動更新されるのですが、
No-IP で登録したホスト名の方は有効期限が 30 日となっており、
期限が切れる前に Web での更新が必要みたいなので、別の DDNS の方が幸せかもしれません。

No-IP がダウンしたときも考えて、もう1つくらい DDNS に登録しようかな。
No-IP の Web 画面を操作するこんなスクリプトもあるようですが、未検証。。

Script to auto renew/confirm noip.com free hosts
https://github.com/loblab/noip-renew


VPN サーバーの構築(SoftEther)

インターネット経由で自宅 LAN にアクセスできるように SoftEther で VPN サーバーを構築する。 ソフトウェアダウンロード https://www.softether-download.com/ja.aspx?product=softether インスト...