blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

各種環境の構築と管理を承ります。

  • 仮想環境: Openstack, GCP, AWS, Azure, ...
  • アプリケーション: WordPress, GitLab, Redmine, ...

List

IntelAMTをLinuxで使ってみる

概要

vPro対応のThinkPadを持っていたので、IntelAMTを使って、SOLをやってみた。 BIOSの設定も可能。 2017年になってIntelAMTの脆弱性が発見されたので、IntelAMTのファームウェアのアップデートは必須。 (おそらく、同じセグメントに信頼できるホストしか居ない場合は問題ない。) IntelAMTのファームウェアのアップデートはWindowsじゃないとできなさそう。

IntelAMTの設定

起動時のThinkPadロゴマーク表示しているときににEnterを押してからCtrl-Pを押してから以下のように設定する。 (今回はSOLのみの設定。)

Linux側の設定

pciの[VendorID:DeviceID]を確認する。

$ lspci -nn | grep -i "serial controller"
00:16.3 Serial controller [0700]: Intel Corporation 7 Series/C210 Series Chipset Family KT Controller [8086:1e3d] (rev 04)

/etc/udev/rules.d/z25_sol.rules に上で確認したIDでttySOLへのシンボリックリンクを作成するように設定する。

KERNEL!="ttyS[0-9]", GOTO="no_serial"
ATTRS{vendor}!="0x8086", GOTO="vendor_not_intel"
ATTRS{device}=="0x1e3d", SYMLINK+="ttySOL", ENV{COMMENT}="Serial-Over-Lan $attr{vendor}:$attr{device}"
GOTO="vendor_not_intel"
LABEL="no_serial"

再起動すると以下のようにシンボリックリンクが作成されることが確認できる。

$ ls -l /dev/ttySOL
lrwxrwxrwx 1 root root 5 Aug  4 22:04 /dev/ttySOL -> ttyS4

この状態でgettyを起動することによって、ttySOLが使えるようになる。

$ sudo /sbin/getty -L ttySOL 115200 vt100-nav

ブート時にgettyが立ち上がるように設定するために、 /etc/default/grubでカーネルの起動パラメータを以下のように変更しupdate-grubする。

GRUB_CMDLINE_LINUX="console=tty0 console=ttyS4,115200n8"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --port=0xf0e0 --word=8 --parity=no --stop=1"

確認

192.168.xx.xx/255.255.255.0 と同じセグメントから http://192.168.xx.xx:16992/ にアクセスするとIntelAMTの画面が見れる。

また、以下でIntel AMTの情報を確認することも可能。

$ sudo apt install amtterm
$ export AMT_PASSWORD=P@assw0rd
$ amttool -h 192.168.xx.xx info
### AMT info on machine '192.168.xx.xx' ###
AMT version:  8.1.71
Hostname:     your-hostname
Powerstate:   S0
Remote Control Capabilities:
    IanaOemNumber                   0
    OemDefinedCapabilities          IDER SOL BiosSetup BiosPause
    SpecialCommandsSupported        PXE-boot HD-boot cd-boot
    SystemCapabilitiesSupported     powercycle powerdown powerup reset
    SystemFirmwareCapabilities      f800

Serial Over LAN

別ホストからIntelAMTのIPアドレスを指定することによってSerial Over LANができた。

$ export AMT_PASSWORD=P@assw0rd
$ amtterm 192.168.xx.xx
amtterm: NONE -> CONNECT (connection to host)
ipv4 192.168.xx.xx [192.168.xx.xx] 16994 open
amtterm: CONNECT -> INIT (redirection initialization)
amtterm: INIT -> AUTH (session authentication)
amtterm: AUTH -> INIT_SOL (serial-over-lan initialization)
amtterm: INIT_SOL -> RUN_SOL (serial-over-lan active)
serial-over-lan redirection ok
connected now, use ^] to escape

Ubuntu 17.04 your-hostname ttyS4

your-hostname login:

BIOSの設定

IntelAMT経由でBIOSの設定をリモートでするには、 予めBIOSで下記のようにConsole TypeをVT100にしておかなければならない。

上記のように設定した状態で下記のように再起動するとBIOSの設定画面を操作することができる。

$ export AMT_PASSWORD=P@assw0rd
$ gamt 192.168.xx.xx &
$ amttool -h 192.168.xx.xx reset bios

refs

ubuntuでzramとzswapを有効にする

概要

メモリが足りなかったので、少しでも良くなればと、zramとzswapを試してみた。 (同じ様な技術なので、どちらか一方で良い。) 環境はUbuntu16.04。

zram

基本はzram-configで管理する。 /usr/bin/init-zram-swapping を一部書き換えてlz4による圧縮にしておく。

install

$ sudo apt install zram-config

/usr/bin/init-zram-swapping

‘echo “lz4” …’ の行を追加しただけ。

#!/bin/sh

# load dependency modules
NRDEVICES=$(grep -c ^processor /proc/cpuinfo | sed 's/^0$/1/')
if modinfo zram | grep -q ' zram_num_devices:' 2>/dev/null; then
  MODPROBE_ARGS="zram_num_devices=${NRDEVICES}"
elif modinfo zram | grep -q ' num_devices:' 2>/dev/null; then
  MODPROBE_ARGS="num_devices=${NRDEVICES}"
else
  exit 1
fi
modprobe zram $MODPROBE_ARGS

# Calculate memory to use for zram (1/2 of ram)
totalmem=`LC_ALL=C free | grep -e "^Mem:" | sed -e 's/^Mem: *//' -e 's/  *.*//'`
mem=$(((totalmem / 2 / ${NRDEVICES}) * 1024))

# initialize the devices
for i in $(seq ${NRDEVICES}); do
  DEVNUMBER=$((i - 1))
  echo "lz4" > /sys/block/zram${DEVNUMBER}/comp_algorithm
  echo $mem > /sys/block/zram${DEVNUMBER}/disksize
  mkswap /dev/zram${DEVNUMBER}
  swapon -p 5 /dev/zram${DEVNUMBER}
done

reboot

以下で反映されている事が確認できる。

$ swapon -s
Filename				Type		Size	Used	Priority
/dev/vda2                              	partition	7200764	0	-1
/dev/zram0                             	partition	254000	0	5
/dev/zram1                             	partition	254000	0	5
cat /sys/block/zram0/comp_algorithm
lzo [lz4]

zswap

zswapはスワップデバイスがあることが前提になる。 lz4を使うためにカーネルブートパラメータとinitramfsのモジュールを調整する。

/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=70"
$ sudo update-grub

initramfs

echo lz4 | sudo tee -a /etc/initramfs-tools/modules
echo lz4_compress | sudo tee -a /etc/initramfs-tools/modules
sudo update-initramfs -u

reboot

リブートするとzswapが有効になっていることがdmesgから確認できる。

$ dmesg | grep "zswap: "
[    2.868315] zswap: loaded using pool lz4/zbud

refs

ssh公開鍵で暗号化、秘密鍵で復号化

概要

ssh公開鍵で暗号化したかったので。

ssh鍵の作成

$ ssh-keygen -f test-key -C user@example.net
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in test-key.
Your public key has been saved in test-key.pub.
The key fingerprint is:
SHA256:ednOCvmuwHgNN4LuYcsfOgwiH/gCbshbo7HHv2NxQhY user@example.net
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|     E           |
|      .          |
|     +   . o     |
| .  + o S o .    |
|= o. = * + o     |
|*=.*= O +   o    |
|o+B*+B o o .     |
|.=o B=+ .o+      |
+----[SHA256]-----+
$ cat test-key
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA4Z5ofSTEnTSkc+Aol/F/o7rCqM+9vYRlgZ232ZydBz/vI96K
MJrUqAfzm6Pmg/yFG5e++H0+qmxTf8FV5P8MGO7C7CSYUjbbmm/xk0ZulcMg4GlL
jH6C/HdiSkI2bW9vz8c2xlfLu3PtD/4nT5YNRZbzUueFYliWe9ENtZbfD7LgbT1h
yaII8up8XXtfGoZiJiae2Fw6Tr5+P99w97+RfA5LdkjwhrK8wIIzrlXc26T5hGWY
InGxeAPAlp1wk90o4Lk0Nm+v+i1baC0bVSM/PHTN1F/nkKuk+ckqwzaJ8ghI2PYi
+kEIVOXfJ663hmVHoQk0MZHsHnCROsi1GaUV+QIDAQABAoIBAQCo401QME/FZfyc
iPWaF7r2Mv04JJnh3dOmHQvcp7GcFa3LafCDxcLeLWWb4irSLhrttr/LfuWD6Sbw
ASdtDcZee4wJ/LLRCCOHDbkGB7kL/k8D7Y4SEzm2Bx/aeooHjV1jabqE6n+lSHfy
esuudaJlr0NhkdF09t9eu/TJM7CyLEpZjle9eunUPgaFZ4jUj/pU3Snwlr//aPF6
Nr+yAIaQnYTzhlV+Vrw57VoE7DInS6ksvYsIPiLrMjPDsE2kXJuKFxjw9RCba7pX
IyMKP/lMt56x4OBhZrQ1nKbJQ9RSXXSZgnz+NLHuVsADcFZ5ut/5ZopXWF8RMG5B
REUHqY8hAoGBAPqGwcjHwnDkhq3uwx+lFe7uNCTBOuNzXpan9orGqwwY0n0kHgWZ
R87dJyHkWVkNe2W3ABoAiQlaBvDFJjND9GKmT/i6nOd8rJ04JeozAkpOtJBC2WV5
RS3rPty9kqCiudQH7e+LAw4KEjKc8Sup5cVpBIxMtWF+oxIYwEi/3OZVAoGBAOaM
Vop4U2GqOErHBhKUq/8uA56+vSUFbefuiFcJ/mx62exPdTXxPypgFggPhkXQfaGo
+rTSTXVApEiHYDWYlATdeuLATviJtkYMDkcIVaSoMkuGXEe9INLQYA4jzzG31Jfe
PTdi6wbU67UsDA0Tq2LC6qOAMk67ENjZBqXApG0VAoGAFrH4gijei32YWc9ka8x3
xTJdFOtQW2SLMBi9M+s1eZ4SC3YnJhixsaLFNcPK+E9JW3iNkM11nJxEPrGNeV1x
mTI50m2NY0cfGAsLHEFMttCUePElYpTu2G8UPckKrHSxYuzo+CdeunndFiqzimIU
x6Jw4Aje8ZsYSL5nRO/kohUCgYEAmpoJfpnp8Fhhn2OPYu5n2JtWuiFWXXkilqGS
tCtzffN0J8+w3heFMDl3DLi8ZhzF4p6aYJ+WacaLZEfD8Kz8tbaALYagbnKK1LZI
7MFeDSjtcVAMmd7uH/C0OUcyLjkES0Mw8e9XhCFMXxXGjw5do8Dp7/KLydgQGBqR
Jp3kpXECgYBC/NO0Fc5mk9m62+cxEcBHVE0NPdomrg/NTZDDzENzDjdl/w8KsGD/
3nXEc2OQnfb3l4wDgkkClv5SsRNravV9DKjudiYNO2bQpE4pJ6eSLuZWSGYxeO5/
P8/nIO5xX89X+XfKifOGlsJ86I9/GIVBFfRXrATOXwByIBdLmfcXkQ==
-----END RSA PRIVATE KEY-----
$ cat test-key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhnmh9JMSdNKRz4CiX8X+jusKoz729hGWBnbfZnJ0HP+8j3oowmtSoB/Obo+aD/IUbl774fT6qbFN/wVXk/wwY7sLsJJhSNtuab/GTRm6VwyDgaUuMfoL8d2JKQjZtb2/PxzbGV8u7c+0P/idPlg1FlvNS54ViWJZ70Q21lt8PsuBtPWHJogjy6nxde18ahmImJp7YXDpOvn4/33D3v5F8Dkt2SPCGsrzAgjOuVdzbpPmEZZgicbF4A8CWnXCT3SjguTQ2b6/6LVtoLRtVIz88dM3UX+eQq6T5ySrDNonyCEjY9iL6QQhU5d8nrreGZUehCTQxkewecJE6yLUZpRX5 user@example.net

公開鍵をopensslで使える形に変換

暗号化にはopensslコマンドを使うが、 OpenSSH形式の公開鍵はそのままではopensslコマンドで使える形式ではないため、変換する。

$ ssh-keygen -f test-key.pub -e -m pem | openssl rsa -RSAPublicKey_in -pubout | tee test-key.pub.pem
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4Z5ofSTEnTSkc+Aol/F/
o7rCqM+9vYRlgZ232ZydBz/vI96KMJrUqAfzm6Pmg/yFG5e++H0+qmxTf8FV5P8M
GO7C7CSYUjbbmm/xk0ZulcMg4GlLjH6C/HdiSkI2bW9vz8c2xlfLu3PtD/4nT5YN
RZbzUueFYliWe9ENtZbfD7LgbT1hyaII8up8XXtfGoZiJiae2Fw6Tr5+P99w97+R
fA5LdkjwhrK8wIIzrlXc26T5hGWYInGxeAPAlp1wk90o4Lk0Nm+v+i1baC0bVSM/
PHTN1F/nkKuk+ckqwzaJ8ghI2PYi+kEIVOXfJ663hmVHoQk0MZHsHnCROsi1GaUV
+QIDAQAB
-----END PUBLIC KEY-----

公開鍵で暗号化

“testtesttest”という文字列をtest-key.pub.pemで暗号化し、 testtesttest.encというファイルに保存する。 途中経過のわかりやすさのためにBASE64で符号化してるが、バイナリで保存しても構わない。

$ echo -n testtesttest | openssl rsautl -encrypt -pubin -inkey test-key.pub.pem | openssl base64 -e | tee testtesttest.enc
VvrtEknlPbJNKAl8kHUwv7aIIZi4D4cDG4TxPBIUcqyGJ9HMMmQ80Igi175Fwxc4
lWHCb9WskIqstoQbWsg3f7ylOkTwxjUlr12PP1iAaNtChjOH0LYwQ9kuSyzNYEyP
fDRIqdfBPp6qajtcDi7iZ7Vzkeqg/9S/KDXYBVEkKRuz3vS4O1X4ehCWs3Oz1G/E
QK75tBQ69QCQp8B7w7RB6mDuUFjLi2CqywG/feU5Xh88MWapVtBvJQM4i8RcAdgx
45v+dgh+Rh7dWn2VEqXJHf8WORQs/PIFvlwAAN/P8t7BU7qPkgQ6EfF/a/KAk5uJ
pZg3bAlpzBzvPRs45AZ4kQ==

秘密鍵で復号化

上記で用意したtesttesttest.encを復号化する。 無事にもとの文字列testtesttestが表れた。

$ cat testtesttest.enc | openssl base64 -d | openssl rsautl -decrypt -inkey test-key
testtesttest

サイズの大きいメッセージの場合

RSA方式では大きなサイズの暗号化はできないようになっている。

$ head -c 245 /dev/zero | openssl rsautl -encrypt -pubin -inkey test-key.pub.pem | openssl base64 -e | tee too-long.enc
RpZEimJN6GYwiM6m1d0FA1+yZLtrLRHyVk7oftHbEIe1leDejLum3IQPw+rfhSTN
DvZMpS4HTKgiXHGExCpTlBqPZkNrIf8LK25xNYhWlQv2kQT/ew8B7n/ZwqU4I+Cn
C7ssZqpnmet+tg5Vz51OqbfsFF3Y5MTWH5PpOG3QlxxSdVTmenceOq3RFvApWYFu
k8HLfExhdW0cIO3cMB+DYYZrStEl69lKVeuqjIaxBUAuLFnHgE9EaoscXiaIo0oP
xyy0uTVR481Wt5DIRf3qxEyD3UU4yZXOb0dOgVHqcyAccOgEYmBma7NrPfbOvqKK
w52gxI8Am/zHBduIs9Awew==
$ head -c 246 /dev/zero | openssl rsautl -encrypt -pubin -inkey test-key.pub.pem | openssl base64 -e | tee too-long.enc
RSA operation error
140735276277840:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:153:

解決策は下記の二つ。

  1. 新たにパスフレーズを用意して、それによって暗号化したファイルと、RSA公開鍵で暗号化したパスフレーズの両方を渡す。(openssl encを使う。)
  2. 秘密鍵を持っている人に証明書を作成してもらってその証明書で暗号化する。(openssl smimeを使う。) この場合は公開鍵のみでは暗号化できないため、秘密鍵をもっている相手に依頼する必要がある。

新たにパスフレーズを用意してopenssl encを使う。

新しいパスフレーズを用意する。

$ openssl rand 128 -base64 | tee newpass.txt
IahxkQyBZ0JPOC5G7PibCAe1aRKhgyGfZI9ZP6N7sMtmc+ydhvMTPDIfUahwo1wT
Y6va31cZSDjGmN3bfNfK6Wi8gZgDzvblwAt5V86fnGFEux8HRDlQmyzDq+Gkuz49
FBuh+UeMSTagOrwc8qpLzbsM7vOutyq9skUd8wN5HSw=

新しいパスフレーズで、暗号化する。

$ echo "too long message" | openssl enc -e -aes-256-cbc -pass file:newpass.txt -base64 | tee too-long-msg.enc
U2FsdGVkX19dctTqYZYLx/pBWPGEe3IDbftQLNfJOC+OzhP9zPw+Q7Fscmaidn6R

新しいパスフレーズをRSA公開鍵で暗号化する。

$ cat newpass.txt | openssl rsautl -encrypt -pubin -inkey test-key.pub.pem | openssl base64 -e | tee newpass.txt.enc
qx12hPjjUMNmJ+dgJ1f4EDueSZP8hrbsWqJBs9QoCEkJ/OPmsunqQF5XRcEWys9O
UfwI7TfVw2PuLIl69TyfS1YQUX8NsBADV4lQfG7+wYzPdVcDJ7uQMTSNC/NHUPq5
x4mXaxgGzSl3KWClnAI/X6k6QWd5xAj7sDa7/2SflqEy/tLrSNf98ov7V2cZPT/V
I5Gal9k3xVKH9hcitU1lrufYlYTeaQT1R8Z+wuDnI7Vliod8nEzypwGJ48KAXrsH
pzZk5O+y/5tlY/T4rqaPtW59Dg+oOjwHVH/umTSDsNOeTig/wdDhw2eFxl/4p27y
KKTwIvsoF2mC1qjaHSpuqA==

復号化したい人は上記で用意したtoo-long-msg.encとnewpass.txt.encを受け取って、所持している秘密鍵で復号化する。 最初にパスフレーズnewpass.encを復号化し、その復号化したパスフレーズでtoo-long-msg.encを復号化する。

$ cat newpass.txt.enc | openssl base64 -d | openssl rsautl -decrypt -inkey test-key | tee newpass.txt.decrypted
IahxkQyBZ0JPOC5G7PibCAe1aRKhgyGfZI9ZP6N7sMtmc+ydhvMTPDIfUahwo1wT
Y6va31cZSDjGmN3bfNfK6Wi8gZgDzvblwAt5V86fnGFEux8HRDlQmyzDq+Gkuz49
FBuh+UeMSTagOrwc8qpLzbsM7vOutyq9skUd8wN5HSw=
$ cat too-long-msg.enc | openssl enc -d -aes-256-cbc -pass file:newpass.txt.decrypted -base64
too long message

復号できた。

証明書を作成して、openssl smimeコマンドで暗号化する

下記のコマンドで秘密鍵から証明書 test-key.crt を作成する。

$ openssl req -x509 -new -key test-key -subj '/' | tee test-key.crt
-----BEGIN CERTIFICATE-----
MIIC0zCCAbugAwIBAgIJALDM4YvDP/kwMA0GCSqGSIb3DQEBCwUAMAAwHhcNMTcw
NTMxMTI1MjI4WhcNMTcwNjMwMTI1MjI4WjAAMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEA4Z5ofSTEnTSkc+Aol/F/o7rCqM+9vYRlgZ232ZydBz/vI96K
MJrUqAfzm6Pmg/yFG5e++H0+qmxTf8FV5P8MGO7C7CSYUjbbmm/xk0ZulcMg4GlL
jH6C/HdiSkI2bW9vz8c2xlfLu3PtD/4nT5YNRZbzUueFYliWe9ENtZbfD7LgbT1h
yaII8up8XXtfGoZiJiae2Fw6Tr5+P99w97+RfA5LdkjwhrK8wIIzrlXc26T5hGWY
InGxeAPAlp1wk90o4Lk0Nm+v+i1baC0bVSM/PHTN1F/nkKuk+ckqwzaJ8ghI2PYi
+kEIVOXfJ663hmVHoQk0MZHsHnCROsi1GaUV+QIDAQABo1AwTjAdBgNVHQ4EFgQU
J01W1iZ9mm+05qsrgkRgyV0QynkwHwYDVR0jBBgwFoAUJ01W1iZ9mm+05qsrgkRg
yV0QynkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAESKXKEnUZRGH
nYTogaQMNhrACPjVQ8tQUIBFAuVHMPWP76JLcEWoh9vbiJLNRkTdWQ6257+O26UW
FRB3GioBS/HBIyl/3DSecLS9oIhGUVBu3UGHWxhbAE9s/Jxd4tfqzvfQYZsQItPx
9D1/1b9sBKATm7QyO6unWEuL02JZTeqVEAl6PW15RDeieoTbk4Gvuiphn9lQlC8y
fTtrFZWXsd4qfvLOUcgBwOOvorsKz4MCM/RAGsNmmWT+G5qwXZc5lrNq6aphS2vo
yZUHAMF4nFsUy3U3Y8qL9YZ7GWkQR9egqBiope5G0tq72s4OHK6gEokdigfiTChS
1ssSgiNHnw==
-----END CERTIFICATE-----

暗号化するひとは上記で作成されたtest-key.crtをもらって、下記で暗号化する。

$ echo "too long message" | openssl smime -encrypt test-key.crt | tee too-long-msg.enc
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64

MIIBgAYJKoZIhvcNAQcDoIIBcTCCAW0CAQAxggEpMIIBJQIBADANMAACCQCwzOGL
wz/5MDANBgkqhkiG9w0BAQEFAASCAQDe24zLmbge2l+FYyPIt4PqIuUUS0qkw9RF
nlOUYM88t1W7Wm1oB1UmQx+b5D7e2sRFvG8nHBnYGY4m7MxsHRBs4Hm9E9NPEcjb
pic2+kVzmHZYOA5lhdrdlJ/Y7ZadWFsvbzXC6UXP9rZULpqpuMVOMw13qGhbh67H
4q+vAvSjSQWjx5xxxvDGVq1LaNah5+TqEkLL1x4BgdWwjK4ip+xD4W1VB2n2zLIr
8oSmJjDh0qaahITiQg+FyZ3Guzu5il1bMXcpFPKkIoWn7VdzmSJLZ2SLxPFr+vlE
r/JV5CW+UD+3n9L6AxZufy+smyUPru9d3C4iI2Ypx+SMnMyFtdDTMDsGCSqGSIb3
DQEHATAUBggqhkiG9w0DBwQIeVxKzaFQQL+AGJpZ/blH/MJebFP4LKm4d4pUJ0o0
ZFUNtA==

秘密鍵を持った人は下記で復号する。

$ cat too-long-msg.enc | openssl smime -decrypt -inkey test-key
too long message

復号できた。

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