2019年1月28日月曜日

linux@l2tpでVPN環境構築

linux@l2tpでVPN環境構築

概要

外出先から自宅のサーバにVPN接続する為にVPN設定をした時のメモ。

環境

下記環境で行った方法です。他の環境では方法が異なる場合が多々あります。たぶん。

必要なパッケージをインストールする

下記コマンドでl2tpのサーバであるxl2tpdを、IPsecのstrongswanをインストール。
今はopenswanじゃないんだねぇ。
$ sudo apt-get install strongswan xl2tpd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libpcap0.8 libstrongswan libstrongswan-standard-plugins ppp
  strongswan-charon strongswan-libcharon strongswan-starter
提案パッケージ:
  libstrongswan-extra-plugins libcharon-extra-plugins
以下のパッケージが新たにインストールされます:
  libpcap0.8 libstrongswan libstrongswan-standard-plugins ppp strongswan
  strongswan-charon strongswan-libcharon strongswan-starter xl2tpd
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
1,860 kB のアーカイブを取得する必要があります。
この操作後に追加で 4,996 kB のディスク容量が消費されます。
続行しますか? [Y/n]

IPsecを設定する

まず、/etc/ipsec.confに設定。最初は下記内容になっていた。
# ipsec.conf - strongSwan IPsec configuration file

# basic configuration

config setup
        # strictcrlpolicy=yes
        # uniqueids = no

# Add connections here.

# Sample VPN connections

#conn sample-self-signed
#      leftsubnet=10.1.0.0/16
#      leftcert=selfCert.der
#      leftsendcert=never
#      right=192.168.0.2
#      rightsubnet=10.2.0.0/16
#      rightcert=peerCert.der
#      auto=start

#conn sample-with-ca-cert
#      leftsubnet=10.1.0.0/16
#      leftcert=myCert.pem
#      right=192.168.0.2
#      rightsubnet=10.2.0.0/16
#      rightid="C=CH, O=Linux strongSwan CN=peer name"
#      auto=start

include /var/lib/strongswan/ipsec.conf.inc
上記のサンプルを元に下記を追記して設定。
conn L2TP-PSK-NAT
        auto        = add
        type        = transport
        left        = %any
        leftauth    = psk
        right       = 192.168.1.2
        rightauth   = psk
        rightsubnet = 192.168.1.0/24
config setup
とりあえず何も書かなくて良い模様。
conn
このセクションでは、IPsecを用いて行われるネットワークコネクションを定義するコネクション仕様を定義する。connに続くのはその定義の名前。
leftとrightが出てくるが、VPNで接続する側をleftとrightで表している。
left/right
leftまたはrightのIPアドレスまたはホスト名を設定し、leftが誰なのかrightが誰なのかを決める。基本的には一方を自分、相手は%any(スマホなどの移動端末は固定ではないので)とする。
subnet
その人のサブネットマスクを設定。これも基本的には、自分のサブネットマスク(例えば、192.168.1.0/24)だけ設定して、相手は設定しない。
auto=add
接続待ち状態で待機する事を設定。

次に、/etc/ipsec.secretsを設定。最初は下記内容。
# This file holds shared secrets or RSA private keys for authentication.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.

# this file is managed with debconf and will contain the automatically created private key
include /var/lib/strongswan/ipsec.secrets.inc
ここに事前共通鍵の設定を追加。sample-keyはなんか適当に変える様に。
: PSK "sample-key"

l2tpを設定する

まず、/etc/xl2tpd/xl2tpd.confを下記のように設定。
[lns default]
name                   = l2tp
ip range               = 192.168.1.200-192.168.1.254
local ip               = 192.168.1.2
length bit             = yes
refuse pap             = yes
refuse chap            = yes
require authentication = yes
pppoptfile             = /etc/ppp/options.l2tpd.lns
name
認証に使用する名前。ppp設定時のnameと関連付ける(確か)
ip range
接続してきたユーザに設定するIPアドレス
local ip
サーバのローカルIPアドレス
length bit
l2tpヘッダのlengthフィールド有無の設定(かな?)
refuse pap
PAPの使用拒否
refuse chap
CHAPの使用拒否

pppを設定する

次に/etc/ppp/options.l2tpd.lnsを下記のように設定。
name l2tp
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
nodefaultroute
lock
nobsdcomp
mtu 1280
mru 1280
logfile /var/log/xl2tpd.log
name
認証時に使用する名前(らしい)
refuse-pap
PAPの使用を許可しない。
refuse-chap
CHAPの使用を許可しない。
refuse-mschap
MS-CHAPの使用を許可しない。
refuse-mschap-v2
MS-CHAPv2による自己証明を要求する。
nodefaultroute
ユーザにデフォルト経路を作成させない。
lock
排他アクセスを確実に行うために、ロックファイルを作成する。(良く分かってない…)
nobsdcomp
パケットのBSD-Compress圧縮を無効にする。
mtu
MTU値の設定。
mru
ネゴシエーション時のMRU値
logfile
ログファイルのパス

次に/etc/ppp/chap-secretsを下記のように設定。
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"username" * "password" *
これで、usernameとpasswordでログインとなる。

カーネルパラメータを設定する

次に/etc/sysctl.confの下記行のコメントアウトを解除。
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
ipv4のパケット転送を有効にする。

設定を反映する

下記コマンドで必要なデーモンの再起動を実施。
$ sudo service strongswan restart
$ sudo service xl2tpd restart
$ sudo sysctl -p

2019年1月19日土曜日

linux@IPアドレス設定

linux@IPアドレス設定

概要

Debian Linuxで動的IPアドレスを固定IPアドレスに変更する方法のメモ。
インストール時に設定すれば良かったんですが、適当に進めてしまったので動的IPアドレス設定になってしまい、、、(以下略

環境

下記環境で行った方法です。他の環境では方法が異なる場合が多々あります。

現在の設定内容を確認する

下記コマンドでIPアドレス情報を出力して確認。
$ ip address
debianはifconfigとかのコマンドがデフォルトで入っていないんですね。
こんな素晴らしい記事を見つけました。私のようにifconfigを適当に使っていた方にはオススメです。
上のコマンドを実行すると、下記のように出力されます。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0d:b9:0d:8a:a8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.132/24 brd 192.168.1.255 scope global enp0s13
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:b9ff:fe0d:8aa8/64 scope link
       valid_lft forever preferred_lft forever
eth0とかじゃないんだなぁ。
こちらも素晴らしい記事。へぇそうなのか。バス0スロット13のethernet。
これらIPアドレスは何を元に設定されているのかというと、/etc/network/interfacesに書かれている。
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s13
iface enp0s13 inet dhcp

設定を変更する

/etc/network/interfacesの↓の部分を
iface enp0s13 inet dhcp
↓に変更する。ちなみにroot権限で編集が必要。
iface enp0s13 inet static
   address 192.168.1.2
   netmask 255.255.255.0
   gateway 192.168.1.1
   dns-nameservers 192.168.1.1 8.8.8.8
これで↓の設定になります。
項目 内容 備考
IPアドレス 192.168.1.2
サブネットマスク 255.255.255.0
デフォルトゲートウェイ 192.168.1.1 我が家ではルータのアドレス
プライマリDNS 192.168.1.1
セカンダリDNS 8.8.8.8 google先生のDNS

設定を反映する

下記コマンドを入力して、ネットワークを再起動させ設定を反映します。
$ sudo service networking restart
これで行けると思ったんですが、OS再起動じゃないとダメでした。
なので、下記コマンドでOS再起動を実施して反映。
$ sudo shutdown -r now
再起動したら、反映を確認。
$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0d:b9:0d:8a:a8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global enp0s13
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:b9ff:fe0d:8aa8/64 scope link
       valid_lft forever preferred_lft forever

linux@Wake-on-LANで遠隔サーバ起動

linux@Wake-on-LANで遠隔サーバ起動

概要

最近、組み込みボードでL2TP/IPsecを使ったVPNサーバを立てたので、VPNサーバからWake-on-LAN(WoLを用いて 、プログラムのコンパイル等に使用している開発サーバの起動を行えるようにした時のメモです。
WoLによる起動
VPNサーバ
開発サーバ
本記事を参考にされる場合は、VPNサーバを「起動させる為に使うPC」、開発サーバを「起動したいPC」に読み替えて下さいませ。

環境

環境は下記の通りです。
VPNサーバ 開発サーバ
OS Debian 9.4 Ubuntu 16.04.4 LTS

手順

大きく下記の手順で行いました。
  1. BIOS設定
    開発サーバのBIOSでWoLを許可する設定をします。こればっかりは設定の仕方がPC毎に違ったりするので、本記事では記載しません。
  2. 開発サーバ設定
    開発サーバのOSでWoLを許可する設定を行う為のコマンドをインストールします。
  3. VPNサーバ設定
    VPNサーバから開発サーバを起動する為のコマンドをインストールします。

開発サーバ(起動したいPC)の設定

ethtoolのインストール

ethtoolが既にインストール済みの場合は本章の実施はスキップです。
私のubuntu serverには元々入っていました。
下記コマンドでethtoolをインストールします。
$ sudo apt-get install ethtool

Wake-on-LAN情報の取得

まずは、下記コマンドでWake-on-LANに使うインタフェース名を調べます。
$ ifconfig
↓がコマンド実行結果です。
eth0      Link encap:イーサネット  ハードウェアアドレス 00:1a:92:50:86:20
          inetアドレス:192.168.1.7  ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: fe80::21a:92ff:fe50:8620/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:49647 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:29796 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:66014316 (66.0 MB)  TXバイト:2293992 (2.2 MB)

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:65536  メトリック:1
          RXパケット:260 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:260 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1
          RXバイト:17840 (17.8 KB)  TXバイト:17840 (17.8 KB)
私の場合はeth0を使います。環境によってはeth0という名称ではないようです。
ついでに、MACアドレスも必要になるので、メモしておきます。私のPCの場合は00:1a:92:50:86:20でした。
次に下記コマンドを使って WoL が有効か確認します。
$ sudo ethtool eth0
eth0の部分はお使いの環境に合わせて下さい。
↓がコマンド実行結果です。
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
        Link partner advertised pause frame use: Symmetric
        Link partner advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000033 (51)
                               drv probe ifdown ifup
        Link detected: yes
この中で、Wake-on: gとなっている個所に注目します。
gの場合は有効となっています。dの場合は無効となっているようです。

WoL の有効化

Wake-on: gとなっている方は不要です。
下記コマンドを使って WoL の有効化を行います。
$ sudo ethtool -s eth0 wol g
※ 私の環境では↑のコマンド実行は不要だったので試せていません。ご了承下さい。
ちなみに、OS起動時に毎回上記コマンドを使って設定する必要がある為、起動時に自動実行するようにしておきましょう。

VPNサーバ(起動させる為に使うPC)の設定

wakeonlanのインストール

wakeonlanは WoL のマジックパケットを送信するコマンドです。これを使って、開発サーバを起動します。
VPNサーバで、下記コマンドによりwakeonlanをインストールします。
$ sudo apt-get install wakeonlan

開発サーバ(起動したいPC)の起動

VPNサーバで下記コマンドを実行する事で開発サーバを WoL で起動します。
$ wakeonlan 00:1a:92:50:86:20
MACアドレスは先程調べたものを使います。00:1a:92:50:86:20は私の環境の値ですので、皆さんの環境に合わせた値を使って下さい。
↓はコマンド実行結果です。
Sending magic packet to 255.255.255.255:9 with 00:1a:92:50:86:20

PlantUML@Windowsバッチファイルで起動

PlantUML@Windowsバッチファイルで起動
仕事でPlantUMLを使うようになったので、その使用方法備忘録。

PlantUMLインストール

PlantUMLのインストール?何言ってんのダウンロードしたファイルをダブルクリックで起動できるやん!
私は↓に格納インストールしました。
"C:\Program Files\PlantUML\plantuml.jar"

バッチファイル作成

好きなところにplantuml.batみたいなファイルを作成して、下記のように編集。
"C:\Program Files\PlantUML\plantuml.jar"
plantuml.batをダブルクリックして、PlantUML起動!!
できた!!
・・・
え?
コマンドプロンプトずっと出てるんですけど…

コマンドプロンプトを出させない

↓のように修正します。
start javaw -jar "C:\Program Files\PlantUML\plantuml.jar"

おまけ

画像が大きかった時に、デフォルト設定では問答無用に画像がバッサリ切られますが、下記のように設定すれば、ある程度まで画像を大きくする事ができます。
start javaw -DPLANTUML_LIMIT_SIZE=8192 -jar "C:\Program Files\PlantUML\plantuml.jar"

Rust@naked関数

Rust@naked関数 multiboot仕様でブートローダを自作せずGRUBから自作カーネル(もどき)を起動できたので、起動情報も色々受け取りたい。multiboot準拠していれば、起動直前にブートローダがレジスタEAXにマジック値を...