keima's caprice diary

気付いたことをメモのように綴ります。なるべく義務っぽくならないように気まぐれに記録します。

【素朴な疑問】cisco ios-xe 3系の後継が16系とはこれいかに?

cisco isr4000系の機器ではios-xeが採用されています。

そのversionについて、とあるベンダーの推奨versionが「3.6.xx(自主規制)」だそうです。この機器に対応しているios-xeのversionは他にどんなものがあるのか、ciscoのwebサイトで調べてみると、後継versionとして「16.x.x」なども確認できました。

IOS-XE 16.x Standard Maintenance のメンテナン... - Cisco Support Community

ここで素朴な疑問が湧きました。

3系の後継がなぜ16系なのでしょう。

序列的に4系になるのが自然でしょう、と。

 

また、ciscoが推奨するversionを確認する方法があるのかな。

Linuxでsftpサーバを構築する

お手軽にファイル共有を実現する目的でLinuxを使うことにした。

 

■事前定義事項

・通常時はuserユーザを使用
・userユーザはchroot化する

chroot対象を"/home/user/chroot"にする

■作業手順

■ユーザ(user)を作成

useradd user
passwd user

sshdコンフィグを調整

vi /etc/ssh/sshd_config

---
# Subsystem sftp /usr/libexec/openssh/sftp-server <- コメントアウトしておく
Subsystem sftp internal-sftp <- 追記
Match User designer <- 追記
ChrootDirectory /home/user/chroot <- 追記
ForceCommand internal-sftp <- 追記

■権限と所有者を調整

mkdir /home/user/chroot

chown root:root -R /home/user/chroot
chmod 755 /home/user/chroot

mkdir /home/user/chroot/work

chown user:user /home/user/chroot/work

chmod 755 /home/user/chroot/work

selinux無効化

setenforce 0

vi /etc/selinux/config

SELINUX行の右辺をdisabledにする。

sshd再起動

/etc/init.d/sshd restart

以上。

LinuxをL2TP/IPsecクライアント兼NATルータにしてみる

■基本情報

OS : CentOS release 6.8 (Final)
IPsec Software : Linux Libreswan 3.15 (netkey) on 2.6.32-642.el6.i686
L2TP Software : xl2tpd-1.3.8

VPN接続情報(伏せ字

Target : [接続先 IP]
PSK : [事前共有鍵]
Account01 : [L2TPユーザ名]
password01 : [L2TPユーザ名に対応するPW ]

■ソフトウェアインストール

yum -y install openswan
rpm -Uvh https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel/6/i386/epel-release-6-8.noarch.rpm
yum -y install xl2tpd

ipsecコンフィグ調整

cp /etc/ipsec.conf /etc/ipsec.conf.org
vi /etc/ipsec.conf
---
# 以下2行のみ記述
config setup
include /etc/ipsec.d/*.conf
---

vi /etc/ipsec.d/ipsec.secrets
---
[自身がVPN接続先と通信する際に使うローカルIP] [接続先 IP] : PSK "事前共有鍵"
---

vi /etc/ipsec.d/connection.conf
---
# 2行目(authby行)以下は行頭にタブが必要
conn PEER_L2TP
authby=secret
pfs=no
rekey=no
keyingtries=3
type=transport
# left=%defaultroute
left=[自身がVPN接続先と通信する際に使うローカルIP]
leftprotoport=17/1701
right=接続先 IP
rightprotoport=17/1701
auto=add
---

cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.org
rm -rf /etc/xl2tpd/xl2tpd.conf ; vi /etc/xl2tpd/xl2tpd.conf
---
[lac L2TP1]
lns = [接続先 IP]
require chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd.conn-1
length bit = yes
redial = yes
redial timeout = 10
max redials = 3
---

vi /etc/ppp/options.xl2tpd.conn-1
---
name [L2TPユーザ名]
noauth
crtscts
mtu 1410
mru 1410
nodefaultroute
lock
proxyarp
logfile /var/log/xl2tpd.conn-1.log
---
echo '[L2TPユーザ名] * [L2TPユーザ名に対応するPW] *' >> /etc/ppp/chap-secrets
---
■NW設定変更

for line in `ls /proc/sys/net/ipv4/conf/*/send_redirects`; do echo 0 > $line ;done
for line in `ls /proc/sys/net/ipv4/conf/*/rp_filter`; do echo 0 > $line ;done
for line in `ls /proc/sys/net/ipv4/conf/*/accept_redirects`; do echo 0 > $line ;done
echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
sysctl -p

■ひとこと

ここまできたらL2TP over IPsec クライアントとしての設定はほぼ完成。
ここで、VPNクライアント兼NATルータになるLinuxのデフォルトルートを削除しておく。
なぜならLinuxVPN接続した後のLinuxとしてのデフォルトルートをVPN接続先にしておきたいから。

vi /etc/sysconfig/network-scripts/ifcfg-[任意のi/f名称]
-> "GATEWAY" 行を削除
/etc/init.d/network restart

■接続用スクリプト作成

vi startVpn.sh
---
service ipsec stop
service xl2tpd stop
service ipsec start
service xl2tpd start
sleep 5
ip route add [接続先 IP]/32 via 192.168.10.253
echo "c L2TP1" > /var/run/xl2tpd/l2tp-control
ipsec auto --up PEER_L2TP
sleep 5
route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -j ACCEPT

■切断用スクリプト作成

vi stopVpn.sh
---
echo "d L2TP1" > /var/run/xl2tpd/l2tp-control
ipsec auto --down PEER_L2TP
sleep 3
service ipsec stop
service xl2tpd stop
iptables -t nat -D POSTROUTING -o ppp0 -j MASQUERADE
iptables -D FORWARD -j ACCEPT
ip route del [接続先 IP]/32 via 192.168.10.253


iptables微調整(全開放

vi /etc/sysconfig/iptables
---
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
COMMIT

iptables再起動

/etc/init.d/iptables restart

■ルータ化設定

# 確認
grep "net.ipv4.ip_forward" /etc/sysctl.conf
# 変更
sed -i -e "s/net\.ipv4\.ip_forward = 0/net.ipv4.ip_forward = 1/" /etc/sysctl.conf
# 確認
grep "net.ipv4.ip_forward" /etc/sysctl.conf

■ /etc/rc.d/rc.local に echo 1 >/proc/sys/net/ipv4/ip_forward を追記

vi /etc/rc.d/rc.local
---
#!/bin/sh
echo 1 >/proc/sys/net/ipv4/ip_forward

■NETWORKファイル修正(Gateway無効化)

vi /etc/sysconfig/network
---
NETWORKING=yes
HOSTNAME=[任意]
FORWARD_IPV4=yes
GATEWAY=
GATEWAYDEV=

■APIPA無効

echo 'NOZEROCONF=yes' >> /etc/sysconfig/network

■ネットワーク再起動

/etc/init.d/network restart

準備は以上。

VPN接続する

bash startVpn.sh

VPN切断する

bash stopVpn.sh

いくつか他にもやりようはありそう。。。。

 

CentOs7 Chrony NTPサーバとしての設定

01. /etc/chrony.conf編集
---
server ntp.nict.jp iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
### ▼同期元クライアントに制限をかけたい場合は指定
allow 192.168.10.0/24 10.10.0.0/24
### ▼Stratum1を最上位として何番目のStratumにするか指定
local stratum 10
logdir /var/log/chrony
log measurements statistics tracking
---

 

02. chrony再起動

systemctl restart chronyd

 

03. 動作確認

chronyc sources -v

MS列にそれぞれ^*などと表示されいれば上位NTPサーバとローカルホストが時刻同期できている。
下位NTPクライアントがローカルホストと同期できているかどうかは下位クライアント側で確認する必要がある。
 

centos linux ntpd 設定手順

Linux NTP 時刻同期設定

NTPクライアントとして使用するケース

 

Target : CentOS6.8


01. システムクロックの確認
date

02. ハードウェアクロックの確認
hwclock -w
hwclock --show

03. NTPD確認
/etc/init.d/ntpd status

04. NTPD停止
/etc/init.d/ntpd stop

05. システムクロックをNICTに合わせる
ntpdate ntp.nict.jp

06. /etc/ntp.conf編集
---
server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp
server -4 ntp3.jst.mfeed.ad.jp
---

07. NTPD起動
/etc/init.d/ntpd start

08. ntpd 状態確認
各サーバの前に*とか+がつくと同期完了
ntpq -p

09. 自動起動を設定
chkconfig ntpd on
chkconfig --list ntpd

10. ハードウェアクロックをシステムクロックに同期
hwclock -w
hwclock --systohc

以上。

カンマ区切りの数字が羅列されたファイルを読み込んで、カンマで区切られた要素数を合計して標準出力に表示するPerl

使い方 : 第1引数にカンマ区切りの数字が羅列されたファイルを置いてperl実行!!

uniq-sort-count.pl #!/bin/perl -w
open IN,$ARGV[0];$_=<IN>;close IN;chomp;
%uniq=map{$_=>1}split(/,/);
@_=sort{$a<=>$b}keys %uniq; $num = $#_+1;
print"$num\n";

dig要求と応答を抽出するperlスクリプト

作業フォルダ内にdigコマンドを実行しまくったテラタームログ(拡張子log)ファイルがたくさんあって、コマンドを実行した際のクエリとレスポンスをまとめる作業に便利かと思って作成した。

以下のようなパターンの行を抽出してresult.txtに書き出す。

[root@root ~]# dig @localhost yahoo.com
;; QUESTION SECTION:
(クエリパターン)
;; ANSWER SECTION:
(dig結果)

#! /bin/perl -w
use warnings;
use strict;
# 変数初期化
my @filename = ();
my $filen;
my $bkupfile;
my @array = ();
my $flag = '0';
# ファイル名を配列保存
while(glob "*.log"){push(@filename, "$_");}
# ファイル名をスカラ保存
# 最下部でループ処理クローズ。
while($filen = shift(@filename)){
open(READ,"< $filen");open(OUT,"> ./result.txt");
# 各行を配列保存
while(<READ>){
push(@array, $_);
}
close(READ);
# パターンマッチ抽出
# マッチしたらフラグを立てる
while(my $line = shift @array){
if($line =~ /dig/){print OUT $line;}
if($line =~ /QUESTION SECTION/){print OUT $line;$flag = '2';}
elsif($line =~ /ANSWER SECTION/){print OUT $line;$flag = '1';}
elsif($flag == '1' or $flag == '2'){if($line =~ /^\n$/){$flag = '0';next;}else{print OUT $line;}
}
}
close OUT;
}