投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2018年4月27日金曜日

【Linux CentOS 6.9】ユーザースクリプトに一切手を加えることなく、その排他的実行を保証するための自作スクリプト公開【RunScriptAlone.sh】

スクリプトの重複起動禁止制御を行いたい。

crontabで、定期的にスクリプトを実行することは多々ある。

複数のスクリプトがそれぞれ、数分から数十分の間隔でスケジュールされている場合、
一つのスクリプトの処理が完了しない間に、別のスクリプトが処理されてしまう。
例えば次のような設定では、30分毎に動作するタイミングが重なってしまう。

*/1 * * * * /root/Scripts/scriptA.sh
*/30 * * * * /root/Scripts/scriptB.sh

そしてそれらが同じタイミングで実行されてはいけないものであれば不具合が発生する。
このような問題を避けるには、これらが同時実行されないように排他処理を行う必要がある。

後に挙げた「排他的実行スクリプト(RunScriptAlone.sh)」を作成することで排他処理を実現できた。



■「排他的実行スクリプト(RunScriptAlone.sh)」の概要
(スクリプト本体は次の項に挙げている。)

次の特徴がある。

○汎用的に使える

考慮した点は、汎用的に動作することである。

即ち、排他的に動作させたいユーザースクリプトを一つ目の引数に指定するだけで良い。
既存のユーザースクリプトには一切手を加える必要がない。

(指定例)
# /root/Scripts/RunScriptAlone.sh /root/scriptA.sh

したがって、crontab -e で次のように指定しておけば、
ユーザースクリプト( /root/scriptA.sh )と、
ユーザースクリプト( /root/scriptB.sh )は排他的に実行される。

(タイミングが重なっても、一方の処理が完了するのを待って他方は実行される。)
*/1 * * * * /root/Scripts/RunScriptAlone.sh /root/scriptA.sh
*/30 * * * * /root/Scripts/RunScriptAlone.sh /root/scriptB.sh
これは、次に挙げている「検出モード 1」を利用している。


○排他効果を及ぼす範囲を自由に決定できる。

どのユーザースクリプトと、どのユーザースクリプトを排他的に実行するかを決められる。
この仕組みを、二通りの方法で実現した。


(検出モード 1)デフォルト

一つは、第一引数に指定されたユーザースクリプトを排他的に動作させるために、
「排他的実行スクリプト」自身の実行パスをプロセスの検索キーとして用いる。
これにより、同じ実行パスがプロセス一覧に存在すれば待機することになる。
これがデフォルト動作である。上記に挙げた例はこれを用いている。

これを応用すれば、互いに排他的に動作させたいユーザースクリプトのグループごとに、
それぞれ「排他的実行スクリプト」を異なるパスに用意すればいい。
「排他的実行スクリプト」自身の実行パスをプロセスの検索キーなので、排他的に動作させるべき関係を区別できる。

crontabには次のように指定すればよい。
*/1 * * * * /root/group1/RunScriptAlone.sh /root/group1/scriptA.sh
*/10 * * * * /root/group1/RunScriptAlone.sh /root/group1/scriptB.sh
*/20 * * * * /root/group2/RunScriptAlone.sh /root/group2/scriptC.sh
*/30 * * * * /root/group2/RunScriptAlone.sh /root/group2/scriptD.sh

ユーザースクリプト /root/group1/scriptA.sh と、/root/group1/scriptB.sh は、
同じ実行パス(/root/group1/RunScriptAlone.sh)の「排他的実行スクリプト」から起動されている。
そのため、この二つのユーザースクリプトは互いに排他的に起動される。

同様に、
ユーザースクリプト /root/group2/scriptC.sh と、/root/group2/scriptD.sh は、
同じ実行パス(/root/group2/RunScriptAlone.sh)の「排他的実行スクリプト」から起動されている。
そのため、この二つのユーザースクリプトは互いに排他的に起動される。


(検出モード 2)

もう一つは、第二引数に任意の文字列を指定して、プロセスの検索キーとして用いる。
これを指定すると、さきの「排他実行スクリプト」の実行パスに関わらず、
排他的に起動すべきユーザースクリプトをグループ化できる。

(指定例)
# /root/Scripts/RunScriptAlone.sh /root/scriptA.sh qawsedrftgyhujikolp
crontabには次のように指定することになる。
*/1 * * * * /root/ABC/RunScriptAlone.sh /root/GHI/scriptA.sh qawsedrftgyhujikolp
*/30 * * * * /root/DEF/RunScriptAlone.sh /root/JKL/scriptB.sh qawsedrftgyhujikolp
ユーザースクリプト /root/GHI/scriptA.sh と、/root/JKL/scriptB.sh は、
同じ検索キー「qawsedrftgyhujikolp」が指定されているため、排他的に実行される。
(タイミングが重なっても、一方の処理が完了するのを待って他方は実行される。)



■「排他的実行スクリプト(RunScriptAlone.sh)」

自作の荒削りで下手糞なスクリプトだが、一応上記の機能は果たせている。

これを用いて何か問題が生じても、一切責任を取りません。
内容を読んで理解できる人のみお試しください。
動作は、CentOS 6.9で確認しています。

こんなスクリプトだけど、自分で作成したものなので、
利用される方はこのサイトを出典としてあげてください。お願いします。

# cat RunScriptAlone.sh
#!/bin/bash
#LOGFILE=/tmp/RunScriptAlone.log
LOGFILE=/dev/null
#引数1(必須)排他的に実行するユーザースクリプトパス
#引数2(オプション)明示的に指定するプロセス検索キー
#(引数2の指定がなければこの制御スクリプトの実行パスが検索キーとして使用される)
KEY=${2:-$0}
echo "$KEY as Key for pgrep" >> $LOGFILE
echo "PPID is $PPID" >> $LOGFILE
echo "PID is $$" >> $LOGFILE
cmdline=`/bin/cat /proc/$$/cmdline`
echo "/proc/$$/cmdline  is  $cmdline" >> $LOGFILE
#echo $1 >> $LOGFILE
#ここから、判定ルーチン
while :
do
# コマンドラインで指定したパス名 $KEY を検索キーにして、既に動作中のプロセスを検索し、最も古いプロセスのIDを取得する。
psnum=`pgrep -fo "$KEY"`
echo "The oldest PID derived from $KEY is $psnum" >> $LOGFILE
# 取得した最古のプロセスIDと、自身のプロセスIDとを比較する。
# 一致しなければ、同一パス名 $KEY で呼び出されたプロセスが他に既に存在しているので待機する。
if [ "$$" != "$psnum"  ]
then
        echo "no" >> $LOGFILE     # 既に同じパスで指定されるスクリプトは起動中である。(二重起動防止のため待機/次のコメントを外すと待機せず中断)
        #exit 1
echo "Now Waiting..." >> $LOGFILE
sleep 10
else
break
fi
done
echo "ok" >> $LOGFILE             #同じパスで指定されるスクリプトは起動していない。(さらに処理を継続)
#ここまで
#echo "pgrep -fo $KEY  is  $psnum" >> $LOGFILE
echo `date` "Starting Script $1" >> $LOGFILE
source $1

以上

【Linux CentOS 7】複数のPDFファイルを結合して一つのPDFファイルを作成する方法


○必要なパッケージを導入するために、nux-dextop リポジトリを追加しておく。

yum install http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm


○パッケージのインストールを行った。

# yum install pdftk
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ pdftk.i686 0:2.02-1.el7.nux を インストール
--> 依存性解決を終了しました。
依存性を解決しました
================================================================================
 Package        アーキテクチャー
                              バージョン              リポジトリー         容量
================================================================================
インストール中:
 pdftk          i686          2.02-1.el7.nux          nux-dextop          8.2 M
トランザクションの要約
================================================================================
インストール  1 パッケージ
総ダウンロード容量: 8.2 M
インストール容量: 37 M
Is this ok [y/d/N]: y
Downloading packages:
pdftk-2.02-1.el7.nux.i686.rpm                              | 8.2 MB   00:48 
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : pdftk-2.02-1.el7.nux.i686                       1/1
  検証中                  : pdftk-2.02-1.el7.nux.i686                       1/1
インストール:
  pdftk.i686 0:2.02-1.el7.nux                                               

完了しました!

○PDFファイルを結合した。

次のコマンドでカレントディレクトリ内にあるpdfファイル結合されて、result.pdfというファイルに出力される。
出力したPDFファイルは複数ページで構成されることになる。

$ pdftk *.pdf cat output result.pdf


一つずつ結合したいPDFファイルを指定することも次のようにしてできた。

pdftk A.pdf B.pdf cat output result2.pdf

【Linux CentOS 7】ハーディスクの書き込み異常、不良ブロックのチェック方法


次のコマンドは、指定したハードディスクをいくつかのパターンで上書きし、
書き込んだ内容が正しいか照合する。
不良ブロックは、指定したファイルに保存するようにしている。

2Tバイト程度のディスク、毎秒120MB/sec程度の書き込み読み込み速度で、50時間以上もの時間を要した



このコマンドで保存されているデータは全て抹消されるので注意する。
特に、指定したディスク(/dev/sdX)がターゲットのものかに注意を払うこと!

# badblocks -svw -o badblock.txt /dev/sdX
Checking for bad blocks in read-write mode
From block 0 to 1900000000
Testing with pattern 0xaa: done                                                
Reading and comparing: done                                                
Testing with pattern 0x55: done                                                
Reading and comparing: done                                                
Testing with pattern 0xff: done                                                
Reading and comparing: done                                                
Testing with pattern 0x00: done                                                
Reading and comparing: done                                                
Pass completed, 0 bad blocks found. (0/0/0 errors)
今回は、不良ブロックはなかったので、出力ファイルは空のままである。
# cat badblock.txt
#


東芝 DT01ACAxxxシリーズ ( 3.5inch / SATA 6Gb/s / 2TB / 7200rpm / 64MB / 4Kセクター ) DT01ACA200

新品価格
¥6,250から
(2018/5/20 23:47時点)


<参考>
・Linux - badblocks コマンドで HDD 不良ブロックのチェック!
< https://www.mk-mode.com/octopress/2015/03/06/linux-hdd-checking-by-badblocks/ > 2018年4月27日

・badblocks
< https://wiki.archlinux.jp/index.php/Badblocks > 2018年4月27日

・LinuxでHDDの不具合を特定する作業の覚え書き
< https://www.xmisao.com/2013/12/28/linux-hdd-tips.html > 2018年4月27日

2018年4月22日日曜日

【Linux CentOS 7】nmcliだけでIPv6とIPv4ネットワークに接続するための設定を行う方法(静的IPアドレスの利用)

(注意)
ファイアーウォールの設定にはここでは触れていないが、ネットワークに接続する前に確実に防御する必要がある。
その後に、下記手順のようにしてネットワークに接続すること。
さもなければ、ネット経由で侵入される危険がある。



■ネットワークデバイスの状態を確認した。

ネットワークデバイスeth0は、ブロードバンドルーターに接続されているが、
未設定のため、ネットワークには接続されていない状態である。

# nmcli d
デバイス  タイプ    状態      接続
eth0      ethernet  切断済み  --
eth1      ethernet  切断済み  -- 
eth2      ethernet  切断済み  -- 
lo        loopback  管理無し  --


■eth0をイーサネットで接続するための基本形を作成した。

○基本型の作成を行った。
設定するデバイス(ifname)は eth0 である。
接続名称(con-name)は eth0 にした。(任意の名称)

# nmcli con add type ethernet con-name eth0 ifname eth0

○システム起動時に自動的に接続するように設定した。
(複数NICで運用している場合、この設定を忘れがちになるので注意。そのとき、他の有効なNICからパケットが飛ぶことになり、うまく通信できない問題が発生し難儀する。)

nmcli con mod eth0 connection.autoconnect yes

つづいて下記のように、IPv6、IPv4のための設定を行った。



■eth0をIPv6ネットワークに接続するための設定を行った。

(注意)
各設定コマンドを入力後、最後に有効化のコマンド(con up)が必要。
さもなければ、名前解決ができないなどエラーとなる。(yumのエラーにもつながる。)

上記で基本形を作成した後、
まず、IPv6のための設定をeth0に行った。

○静的IPv6アドレスを設定した。
# nmcli con mod eth0 ipv6.addresses 'here is Your IPv6 Address'
# nmcli con mod eth0 ipv6.method manual

○デフォルトゲートウェイを設定した。
(注意、環境によってはfe80::1でない場合がある。)
# nmcli con mod eth0 ipv6.gateway 'fe80::1'

○DNSアドレスを設定した。
# nmcli con mod eth0 ipv6.dns 'here is DNS IPv6 Address'


○設定済み項目を一覧した。
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=XXXXXX
DEVICE=eth0
ONBOOT=yes
IPV6ADDR=My IPv6 Address
IPV6_DEFAULTGW=fe80::1
DNS1=DNS IPv6 Address

○サービス開始時に自動接続する(ONBOOT=yes)になっていなければ次のようにして設定できる。
nmcli con mod eth0 connection.autoconnect yes

○上記の設定で接続を開始した。
# nmcli con up eth0

○状態の確認を行った。
# nmcli d
デバイス  タイプ    状態      接続
eth0      ethernet  接続済み  eth0
eth1      ethernet  切断済み  --  
eth2      ethernet  切断済み  --  
lo        loopback  管理無し  --
○動作テスト(設定したeth0側ネットワークへpingを打つ)
# ping6 -I eth0 ipv6.google.com



■eth0をIPv4ネットワークに接続するための設定を行った。

(注意)
予め、前に説明した方法で、接続設定の基本形が作成されていること。
以下の例で、modの後ろで指定されているeth0は、デバイス名でなく接続名である。
接続名が未生成でデバイス名を指定しても、Error: unknown connection のようなエラーとなる。

各設定コマンドを入力後、最後に有効化のコマンド(con up)が必要。
さもなければ、名前解決ができないなどエラーとなる。(yumのエラーにもつながる。)

つづいて、IPv4のための設定もeth0に行った。

○静的IPv4アドレスの設定を行った。
(複数のIPv4アドレスを追加する場合は、カンマで区切って指定する。)
# nmcli con mod eth0 ipv4.addresses 'YYY.YYY.YYY.YYY/23'
# nmcli con mod eth0 ipv4.method manual

○デフォルトゲートウェイを設定した。
# nmcli con mod eth0 ipv4.gateway 'YYY.YYY.YYY.1'

○DNSサーバを指定した。
# nmcli con mod eth0 ipv4.dns '8.8.8.8'

★項目を削除する。(有効にするには、最後に指定しているcon upが必要)
クウォテーションで空を囲う。
# nmcli con mod eth0 ipv4.xxxx ''


○設定を一覧した。(設定済みIPv6に加えて、IPv4設定も追加されている。)
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=
DEVICE=eth0
ONBOOT=yes
IPV6ADDR=/64
IPV6_DEFAULTGW=fe80::1
DNS1=8.8.8.8
IPADDR=YYY.YYY.YYY.YYY
PREFIX=23
GATEWAY=YYY.YYY.YYY.1
DNS2=2XXX:XXXX::1
複数のIPアドレスを指定した場合は、IPADDR(PREFIX)、IPADDR1(PREFIX1)、IPADDR2(PREFIX2)、という風に追加される。

○サービス開始時に自動接続する(ONBOOT=yes)になっていなければ次のようにして設定できる。
(複数NICで運用している場合、この設定を忘れがちになるので注意。そのとき、他の有効なNICからパケットが飛ぶことになり、うまく通信できない問題が発生し難儀する。)

nmcli con mod eth0 connection.autoconnect yes

○上記の設定で接続を開始した。
nmcli con up eth0


※設定を消去したい場合
(ネットワーク越しに接続している場合は注意。その接続が回復しなくなる危険がある)
# nmcli connection delete con-name



<参考>
・Configure IPv6 Addresses And Basic Troubleshooting In Linux
< https://www.rootusers.com/configure-ipv6-addresses-and-basic-troubleshooting-in-linux/ > 2018年4月22日

・CentOS6からの複数IP(secondary)設定方法
< http://www.server-memo.net/centos-settings/network/nic-secondary.html > 2018年4月22日

・VirtualBoxのCentOS7で yum install したら Could not retrieve mirrorlist となった時の対応方法
< https://qiita.com/ponsuke0531/items/e036dfa4dd1e69086e13 > 2019年4月8日

・How to delete connection by name via Network Manager
< https://unix.stackexchange.com/questions/277555/how-to-delete-connection-by-name-via-network-manager > 2021年6月5日

2018年4月18日水曜日

【Linux CentOS 7】LibreSWAN(3.20)のIPsecトンネルでのMTUの設定について

(更新)
2019年12月25日

ホスト(tkbranch)と、ホスト(oskbranch)が、LibreSWANのトンネルで接続されている。

ホスト(tkbranch)はCentOS7で、LibreSWAN(ver. 3.20)がインストールされ、
ホスト(oskbranch)は、CentOS6で、LibreSWAN(ver. 3.12)がインストールされている。


両拠点でそれぞれに対して、pingでは導通テストができている

また、ホスト(tkbranch)からホスト(oskbranch)に、mount -t cifs で、
共有フォルダにアクセスすることができた。


しかし、ホスト(tkbranch)からホスト(oskbranch)にssh接続しようとしたところ、
無応答のままとなった。
間違ったポートを指定してみたところ、「Connection refused」と表示された。
まったくsshの通信ができていないわけではなかった。


この問題は次のようにして、
LibreSWANのIPsecトンネルに「MTU」の値を適切に指定することによって解決できた。



■LibreSWANのトンネル設定で「MTU」の値を指定した。

○MTUとは何か。

ICMPパケットは「IPヘッダー+ICMPプロトコルヘッダー+データ」で構成されている。
「IPヘッダー」は 24バイト、「ICMPプロトコルヘッダーは 4バイト」、合わせて 28バイトである。

MTUは、これに加えて、最大のデータサイズを合わせた値のことである。
MTU = 24byte + 4byte + 最大データサイズ
したがって、最大のデータサイズがいくらかを調べることで、MTUを計算できる。

pingコマンドは、データサイズを任意に変えることができる。
パケットの分割を許さないように指定しながら、通信可能な最大のデータサイズを探る。


○載せられる最大のデータサイズを探索した。

<オプションの意味>
 -c 1 一回だけ送信して相手からの応答を待つ指定
 -s データサイズの指定
 -M do 分割禁止を指定

172.16.1.11は、ホスト(oskbranch)のアドレスで、当のIPSecトンネルを通過する。

[root@tkbranch ~]# ping -c 1 -s 1400 -M do 172.16.1.11
PING 172.16.1.11 (172.16.1.11) 1400(1428) bytes of data.
1408 bytes from 172.16.1.11: icmp_seq=1 ttl=64 time=8.69 ms
--- 172.16.1.11 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 8.699/8.699/8.699/0.000 ms

応答が帰ってきたので、IPsecトンネルを通過できたとわかる


さらに、データサイズを増大させてみる。

[root@tkbranch ~]# ping -c 1 -s 1450 -M do 172.16.1.11
PING 172.16.1.11 (172.16.1.11) 1450(1478) bytes of data.
^C
--- 172.16.1.11 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
今度は応答が帰ってこなかったので、未知のMTUサイズを上回ったとわかる。
1400 < 最大データサイズ < 1450 であることがわかった


したがって、データサイズを小さくして送ってみる。

[root@tkbranch ~]# ping -c 1 -s 1440 -M do 172.16.1.11
PING 172.16.1.11 (172.16.1.11) 1440(1468) bytes of data.
^C
--- 172.16.1.11 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
まだ、ダメ。大きすぎる。

[root@tkbranch ~]# ping -c 1 -s 1430 -M do 172.16.1.11
PING 172.16.1.11 (172.16.1.11) 1430(1458) bytes of data.
^C
--- 172.16.1.11 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
もっと小さく。

[root@tkbranch ~]# ping -c 1 -s 1420 -M do 172.16.1.11
PING 172.16.1.11 (172.16.1.11) 1420(1448) bytes of data.
^C
--- 172.16.1.11 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
もうちょっと。

[root@tkbranch ~]# ping -c 1 -s 1410 -M do 172.16.1.11
PING 172.16.1.11 (172.16.1.11) 1410(1438) bytes of data.
1418 bytes from 172.16.1.11: icmp_seq=1 ttl=64 time=8.71 ms
--- 172.16.1.11 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 8.719/8.719/8.719/0.000 ms
応答が帰って来た。
1410 < 最大データサイズ < 1420 であることがわかった。


では、1411ではどうだろうか。

[root@tkbranch ~]# ping -c 2 -s 1411 -M do 172.16.1.11
PING 172.16.1.11 (172.16.1.11) 1411(1439) bytes of data.
^C
--- 172.16.1.11 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
応答がなかった。
このことから、このIPsecトンネルで送れる最大データサイズは、1410だとわかった


○MTUサイズを計算した。

・IPヘッダーサイズ「20バイト」
・ICMPプロトコルヘッダ「8バイト」
・最大データサイズ「1410バイト」

したがって、MTUサイズは三つを足し算して、「1438バイト」だとわかった。


○LibreSWANのトンネル設定ファイルにMTUの値をセットした。
MTU=1438

そして、IPsecサービスの再起動を行った。

<注意>
ところで、下記に記されている通り、現在のところ、
VTIインターフェイスを利用したVPNトンネルを構築している場合、
MTUサイズをLibreswanによる設定で変えることができないようである。
”MTU
We noticed different kernels create different MTU sizes for new VTI devices. Currently the MTU is not set by libreswan.”
実際に、VTIインターフェイスを用いたVPNトンネルの設定において、上記のようにMTUを設定してみたが、
ip a コマンドで確認しても、VTIインターフェイスのMTUは異なる値を示していた。

(参考)
・Route-based VPN using VTI
< https://libreswan.org/wiki/Route-based_VPN_using_VTI#MTU > 2019年12月25日



■動作テスト

[root@tkbranch ~]# ping -c 2 -s 1500 -M do 172.16.1.11
PING 172.16.1.11 (172.16.1.11) 1500(1528) bytes of data.
ping: local error: Message too long, mtu=1438
ping: local error: Message too long, mtu=1438
^C
--- 172.16.1.11 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 999ms
MTUを越えて通らないサイズのデータを指定してみた。
すると、「Message too long, mtu=1438」と教えてくれるようになった。

また、ssh root@oskbranchのアドレス コマンドで、ssh接続できるようになった。




<参考>
・Linux - MTU 最適値の導出!
< https://www.mk-mode.com/octopress/2015/11/26/linux-mtu-best-effort/ > 2018年4月18日

・ネットワーク用語 > IPヘッダ
< http://program.sagasite.info/wiki/index.php?IP%E3%83%98%E3%83%83%E3%83%80 > 2018年4月18日

・第12回 TCP/IPプロトコルを支えるICMPメッセージ (2/3)
< http://www.atmarkit.co.jp/ait/articles/0306/13/news002_2.html > 2018年4月18日

・How to Find Maximum Size of IP Data Payload that can Traverse WAN Environment Without Fragmentation
< https://support.citrix.com/article/CTX115434 > 2018年4月18日

・[Swan] Trouble with connection dropping
< https://lists.libreswan.org/pipermail/swan/2014/000756.html > 2018年4月18日

・ipsec.conf - IPsec configuration and connections
< https://libreswan.org/man/ipsec.conf.5.html > 2018年4月18日

2018年4月12日木曜日

【Linux CentOS 7】iptablesサービスで、filterとnatの両テーブルの内容を保存し復元する方法


以下では、下記ページのようにして、
CentOS 7 でfirewalld の代わりにiptablesサービスを使用することを前提にしている。
http://akira-arets.blogspot.jp/2018/03/linux-centos7-iptablesservice.html


既存のiptables filterルールに加えて、natルールを追加した。

例えば、
# iptables -t nat -A PREROUTING -i eth1 -d 10.1.1.11 -j DNAT --to 192.168.1.11

これによって、このマシンのeth1(10.1.1.11)にパケットを送ると、
宛先が変更されて、192.168.1.11に送信される。


しかし、このnatルールはどうやってファイルに保存できるのだろう。
iptables-save コマンドに-t nat オプションをつけることで、
このnatルールの出力は可能だった。



■ 入力済みのiptablesルール(filteと、natの両方)を保存する。

iptables-save コマンドはオプションなしで、filterテーブルの内容を出力し、
-t nat オプションで、natテーブルの内容を出力する。

そのため次のように、/etc/sysconfig/iptablesファイルに連続出力させた。
「>>」で上書きせずに書き足すことができた。

# iptables-save > /etc/sysconfig/iptables ; iptables-save -t nat >> /etc/sysconfig/iptables



■保存したルールが有効化されたかどうかを確かめた。

○iptablesサービスを再起動し、/etc/sysconfig/iptablesファイルの内容を読み込ませた。

# systemctl restart iptables


○読み込みが正常かどうかを確認した。

# iptables -L -v
# iptables -L -v -t nat

正常に、filterテーブル、natテーブルの両方のルールが復元されていることがわかった。



<参考>

・6. パケットの料理法の解説
< https://linuxjf.osdn.jp/JFdocs/NAT-HOWTO-6.html >

【Linux CentOS 6】静的ルーティング設定(永続的方法)


192.168.0.0/16 方面宛のパケットを、
eth1に接続している同一ネットワーク上にあるゲートウェイ(172.16.1.1)にルーティングする設定を行った。

# vi /etc/sysconfig/network-scripts/route-eth1
192.168.0.0/16 via 172.16.1.1

上記設定を有効化するには、ネットワークサービスを再起動する。
そのために次のコマンドを実行する。(あるいは、マシンを再起動する。)
(注意)
ネットワークが切断されてしまう。
ネット経由でssh接続している場合は必ずtmuxなどの仮想ターミナルで実行すること
(上記ルーティングが間違っている場合は、再びssh接続できなくなる。)

# service network restart


ルート情報の確認は次のコマンドで行う。
# ip route



<参考>
・Add a Static Route on CentOS
< https://my.esecuredata.com/index.php?/knowledgebase/article/2/add-a-static-route-on-centos >

2018年4月1日日曜日

【RASPBIAN STRETCH LITE March 2018】静的ルーティング情報とIPアドレスの永続的登録の新作法【Raspberry Pi 2】


RASPBIAN STRETCH LITE(Debian Stretch)では、
ネットワーク周りの設定を行うファイルが以前のものとは異なっているそうだ。

ネットワークインターフェイスの設定は、
Debian Wheezy では、/etc/network/interfaces に設定すれば良かったようだが、
Debian Jessie からは、/etc/dhcpcd.conf に設定する必要があるらしい。

このことは、内部で、役割を dhcpd が担っていることを意味する。
この dhcpd は、DHCP と DHCPv6 client であり、豊富な機能をもっているそうだ。



■IPアドレスの固定方法

そこで、IPアドレスの固定は、/etc/dhcpcd.conf で行うことになる。

(RASPBIAN STRETCH LITEの)/etc/dhcpcd.conf 内に記述されていたサンプルである。
コメントアウトされている。
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

DHCPによる設定に失敗した場合に、指定した設定にフォールバックすることもできるようだ。
以下の例では、static_eth0 というプロファイルで指定される設定にフォールバックするようである。
# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0 #static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1

# fallback to static profile on eth0
#interface eth0
#fallback static_eth0
サンプルファイル内には、他にも設定項目が存在していた。



■ルーティング情報の登録と固定

また、ルーティング情報の登録と固定についても、dhcpd に合った方法で行う必要がある。

この dhcpd は、/usr/lib/dhcpcd/dhcpcd-hooks/ 以下にあるスクリプトを辞書順に実行する

そこで、ルーティング情報の設定は、次の場所に記述することになる。


○次のファイルに、ipコマンドを使ったルーティング設定を追加し保存した。
root@raspberrypi:/home/pi# nano /lib/dhcpcd/dhcpcd-hooks/40-route
ip route add 192.168.0.0/16 via 192.168.20.1 dev eth1
ip route add 172.16.0.0/12 via 192.168.20.1 dev eth1
この段階では、登録したルーティング情報は有効にはなっていない。

マシンが再起動すると登録したルーティング情報が有効化される。
(マシンを再起動しても、登録したルーティング情報は復元される。)


○マシンを再起動した。
root@raspberrypi:/home/pi# reboot

○ルーティングテーブルが復元されていることを確認した。
root@raspberrypi:/home/pi# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ntt.setup       0.0.0.0         UG    202    0        0 eth0
default         192.168.20.1   0.0.0.0         UG    203    0        0 eth1
172.16.0.0      192.168.20.1   255.240.0.0     UG    0      0        0 eth1
192.168.0.0     192.168.20.1   255.255.0.0     UG    0      0        0 eth1

192.168.120.0   0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.126.0   0.0.0.0         255.255.255.0   U     203    0        0 eth1

新品価格
¥5,980から
(2018/3/30 01:45時点)

新品価格
¥2,160から
(2018/3/30 01:42時点)

<参考>
・Static routes not working
< https://www.raspberrypi.org/forums/viewtopic.php?t=163252 > 2018年4月1日

・Configuring a Static IP and Static Routes on a Raspberry Pi running Raspbian Jessie using the CLI
< http://www.hospitableit.com/howto/configuring-a-static-ip-and-static-routes-on-a-raspberry-pi-running-raspbian-jessie-using-the-cli/ > 2018年4月1日

・dhcpcd vs /etc/network/interfaces
< https://raspberrypi.stackexchange.com/questions/39785/dhcpcd-vs-etc-network-interfaces > 2018年4月1日

・dhcpcd/DHCP static route(s)
< https://wiki.archlinux.org/index.php/dhcpcd#DHCP_static_route.28s.29 > 2018年4月1日

・How to create a reoccurring static route in current Raspian?
< https://www.raspberrypi.org/forums/viewtopic.php?t=159009 > 2018年4月1日

・Raspberry Pi 2 (Raspbian: jessie) でIPアドレスを固定する
< https://qiita.com/ykog/items/a6dbba1c09e870f8f702 > 2018年4月1日

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad