blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

UbuntuでGlusterFS

概要

GlusterFSを組む必要があったので、それのメモ。

環境

インストール

$ sudo apt install glusterfs-common glusterfs-server glusterfs-client attr

ボリュームの作成

レプリケーションタイプのボリュームvol00を作成する。 Host Aで↓作業。

$ sudo gluster peer probe 192.168.0.2
peer probe: success.
$ sudo gluster peer status
Number of Peers: 1

Hostname: 192.168.0.2
Uuid: 0b639a58-0270-4865-a252-939134a71cc2
State: Peer in Cluster (Connected)
$ sudo mkdir -p /glusterfs/brick00
$ ssh root@192.168.0.2 "mkdir -p /glusterfs/brick00"
$ sudo gluster volume create vol00 replica 2 transport tcp \
    192.168.0.1:/glusterfs/brick00 \
    192.168.0.2:/glusterfs/brick00 force
volume create: vol00: success: please start the volume to access data

ボリュームの開始

$ sudo gluster volume info

Volume Name: vol00
Type: Replicate
Volume ID: 0050f18c-68b9-4f5c-a33e-f716f42e8f73
Status: Created
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.1:/glusterfs/brick00
Brick2: 192.168.0.2:/glusterfs/brick00
Options Reconfigured:
performance.readdir-ahead: on
$ sudo gluster volume start vol00
$ sudo gluster volume info

Volume Name: vol00
Type: Replicate
Volume ID: 0050f18c-68b9-4f5c-a33e-f716f42e8f73
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.1:/glusterfs/brick00
Brick2: 192.168.0.2:/glusterfs/brick00
Options Reconfigured:
performance.readdir-ahead: on

クライアント

上記で作成したvol00をHost A, Host Bでそれぞれマウントする。 Host AとHost Bならばループバックアドレス(127.0.0.1)でももちろん大丈夫。

$ sudo mount -t glusterfs 192.168.0.1:vol00 /mnt/vol00
$ df -h | grep vol00
192.168.0.1:vol00                       98G   62G   31G  67% /mnt/vol00

RTX1200でIPsec/L2TP

概要

YAMAHA RTX1200を買ったので、IPsec/L2TPの設定をしてみた。

前提

基本設定

ip lan1 address 192.168.1.1/24
ip lan3 address aa.aa.aa.aa/aa

IPsec トランスポートモード

同時接続台数が10台のため、template機能を使って設定する。

tunnel select 1
 tunnel template 2-10
 tunnel encapsulation l2tp
 ipsec tunnel 1
  ipsec sa policy 1 1 esp aes-cbc sha-hmac
  ipsec ike keepalive use 1 off
  ipsec ike local address 1 192.168.1.1
  ipsec ike nat-traversal 1 on
  ipsec ike pre-shared-key 1 text pskpskpsk
  ipsec ike remote address 1 any
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 ip tunnel tcp mss limit auto
 tunnel enable 1
 ipsec auto refresh on
ipsec transport 1 1 udp 1701
ipsec transport template 1 2-10

なお、同時接続台数が1のときは↓を設定すれば良い。

tunnel select TUNNEL_NUM
 tunnel encapsulation l2tp
 ipsec tunnel POLICY_ID
  ipsec sa policy POLICY_ID GATEWAY esp aes-cbc sha-hmac
  ipsec ike keepalive use GATEWAY off
  ipsec ike local address GATEWAY 192.168.1.1
  ipsec ike nat-traversal GATEWAY on
  ipsec ike pre-shared-key GATEWAY text pskpskpsk
  ipsec ike remote address GATEWAY any
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 ip tunnel tcp mss limit auto
 tunnel enable TUNNEL_NUM
 ipsec auto refresh on
ipsec transport TRANSPORT_ID POLICY_ID udp 1701

pp anonymous

上記で設定したtunnelインターフェース番号1-10を指定する。

pp select anonymous
 pp bind tunnel1-tunnel10
 pp auth request chap-pap
 pp auth username user00 password00
 pp auth username user01 password01
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp remote address pool 192.168.1.101-192.168.1.110
 ip pp mtu 1258
 pp enable anonymous

masquerade

RTX1200をデフォルトゲートウェイにしたい場合は、マスカレードの設定が必要。

nat descriptor type 1 masquerade
nat descriptor address outer 1 aa.aa.aa.aa
nat descriptor address inner 1 192.168.1.1-192.168.1.254
nat descriptor masquerade static 1 1 192.168.1.1 udp 500
nat descriptor masquerade static 1 2 192.168.1.1 udp 4500
nat descriptor masquerade static 1 3 192.168.1.1 esp
nat descriptor masquerade static 1 10 192.168.1.1 tcp 22
nat descriptor masquerade static 1 11 192.168.1.1 tcp telnet
nat descriptor masquerade static 1 12 192.168.1.1 tcp www

l2tp

最後にL2TPのサービスをオンにすると、IPsec/L2TPの完成。

l2tp service on

2台のRTX1100でIPsec

概要

YAMAHA RTX1100が安かったので、2台でIPsecの設定をしてみた。

前提

RT0

ip lan2 address A.A.A.A/A
ip lan1 address b.b.b.b/b

(RT0) IPsec トンネルモード

RT1のアドレスがわからない、という前提なので、remote addressはanyに設定する。

tunnel select TUNNEL_ID
 description tunnel RT0-RT1
 ipsec ipcomp type none
 ipsec tunnel POLICY_ID
  ipsec sa policy POLICY_ID GATEWAY esp aes-cbc sha-hmac
  ipsec ike encryption GATEWAY aes-cbc
  ipsec ike group GATEWAY modp1024
  ipsec ike hash GATEWAY sha
  ipsec ike keepalive log GATEWAY on
  ipsec ike keepalive use GATEWAY on dpd 20 3
  ipsec ike local address GATEWAY b.b.b.1
  ipsec ike local id GATEWAY b.b.b.0/b
  ipsec ike nat-traversal GATEWAY on
  ipsec ike payload type GATEWAY 2
  ipsec ike pre-shared-key GATEWAY text pskpskpsk
  ipsec ike remote address GATEWAY any
  ipsec ike remote name GATEWAY RT1
  ipsec auto refresh GATEWAY on
 ip tunnel tcp mss limit auto
 tunnel enable TUNNEL_ID

(RT0) masquerade

(RT0)をデフォルトゲートウェイにしたい場合は、マスカレードの設定が必要。

nat descriptor type 1 masquerade
nat descriptor address outer 1 A.A.A.A
nat descriptor address inner 1 b.b.b.1-b.b.b.254
nat descriptor masquerade static 1 1 b.b.b.1 udp 500
nat descriptor masquerade static 1 2 b.b.b.1 udp 4500
nat descriptor masquerade static 1 3 b.b.b.1 esp
nat descriptor masquerade static 1 10 b.b.b.1 tcp 22
nat descriptor masquerade static 1 11 b.b.b.1 tcp telnet
nat descriptor masquerade static 1 12 b.b.b.1 tcp www

RT1

ip lan2 address c.c.c.2/c
ip lan1 address d.d.d.1/d

(RT1) IPsec トンネルモード

tunnel select TUNNEL_ID
 description tunnel RT1-RT0
 ipsec ipcomp type none
 ipsec tunnel POLICY_ID
  ipsec sa policy POLICY_ID GATEWAY esp aes-cbc sha-hmac
  ipsec ike encryption GATEWAY aes-cbc
  ipsec ike group GATEWAY modp1024
  ipsec ike hash GATEWAY sha
  ipsec ike keepalive use GATEWAY on dpd 20 3
  ipsec ike local address GATEWAY d.d.d.1
  ipsec ike local id GATEWAY d.d.d.0/d
  ipsec ike local name GATEWAY RT1 key-id
  ipsec ike nat-traversal GATEWAY on
  ipsec ike payload type GATEWAY 2
  ipsec ike pre-shared-key GATEWAY text pskpskpsk
  ipsec ike remote address GATEWAY A.A.A.A
  ipsec auto refresh GATEWAY on
 ip tunnel tcp mss limit auto
 tunnel enable TUNNEL_ID

(RT1) 静的ルーティング

RT1からRT0へのトラフィックのみはRT9を通るようにし、それ以外はトンネルインターフェースを経由するように設定する。

ip filter 1000 pass c.c.c.1/c * * * *
ip filter 1001 pass d.d.d.0/d * * * *
ip route default gateway c.c.c.1 filter 1000 gateway tunnel 1 filter 1001 hide gateway c.c.c.1
ip route b.b.b.0/b gateway tunnel TUNNEL_ID
ip route A.A.A.A gateway c.c.c.1

debootstrapでUbuntuのイメージを作成して、machinectlで立ち上げる。

概要

debootstrapでrootfsを作って、machinectlで立ち上げるまでをやってみました。

debootstrap

$ sudo debootstrap --include=linux-image-generic,grub xenial xenial.tgz http://ubuntutym.u-toyama.ac.jp/ubuntu
$ sudo tar czvf xenial.tgz -C xenial .
$ sudo machinectl import-tar xenial.tgz xenial00

イメージが登録されていることが確認できる。

$ sudo machinectl list-images
NAME     TYPE      RO  USAGE  CREATED                     MODIFIED
xenial00 subvolume no  754.2M Thu 2017-02-09 16:10:00 JST n/a

systemd-nspawnで下準備

debootstrapをしたままのイメージでは machinectl login できないので下記を行う。

$ sudo systemd-nspawn -M xenial00
root@xenial00:~# passwd
root@xenial00:~# rm /etc/resolv.conf && echo "nameserver 8.8.8.8" >> /etc/resolv.conf
root@xenial00:~# apt update && apt install dbus
root@xenial00:~# echo pts/0 >> /etc/securetty

終わったら “^]” を3回押してnspawn上のシェルから抜ける。

machinectl start & login

上記までで、machinectlをつかってインスタンスが立ち上げられる状態になる。

$ sudo machinectl start xenial00
$ sudo machinectl login xenial00

opensslでwebサーバを起動して、証明書の確認

概要

証明書が使えるものかどうかをWebブラウザで確認するときに、 apacheの再起動とかをしなくても、opensslコマンド一つでできるので、そのメモ。

サーバ側

letsencrypt(certbot)で調達した証明書を利用します。 8443番ポートでサーバを起動します。

$ cd /etc/letsencrypt/live/blog.monophile.net/
$ openssl s_server -www -accept 8443 -key privkey.pem -cert cert.pem -CAfile chain.pem

クライアント側

クライアントは https://blog.monophile.net:8443/ を開くだけ。

$ curl -s -v https://blog.monophile.net:8443/ > /dev/null

↓がその出力。

*   Trying 49.212.208.99...
* TCP_NODELAY set
* Connected to blog.monophile.net (49.212.208.99) port 8443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /opt/local/share/curl/curl-ca-bundle.crt
  CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [94 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3328 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=blog.monophile.net
*  start date: Feb  4 08:31:00 2017 GMT
*  expire date: May  5 08:31:00 2017 GMT
*  subjectAltName: host "blog.monophile.net" matched cert's "blog.monophile.net"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
} [5 bytes data]
> GET / HTTP/1.1
> Host: blog.monophile.net:8443
> User-Agent: curl/7.52.1
> Accept: */*
>
{ [5 bytes data]
* HTTP 1.0, assume close after body
< HTTP/1.0 200 ok
< Content-type: text/html
<
{ [7659 bytes data]
* Curl_http_done: called premature == 0
* Closing connection 0
} [5 bytes data]
* TLSv1.2 (OUT), TLS alert, Client hello (1):
} [2 bytes data]