Category Archives: NETWORK

RTX1200でNTP(SNTP)サーバを建てる

以下のコマンドでSNTPサーバを立てられるようです。

schedule at 1 */* *:00 * ntpdate ntp.nict.jp
sntpd service on
sntpd host lan

毎日0時にNICTのNTPサーバと同期して、LAN内のNTPクライアントからリクエストがあった場合は時刻を返します。

参考サイト
うつくしくいきたい:ヤマハルータ(RTX810)で時刻合わせ – livedoor Blog(ブログ)
38.1 スケジュールの設定
SNTPサーバー機能

RTX1200 L2TP IPsec Windows10から繋げない

RTX1200でL2TPなVPNを繋げるようにしているのですがiPhone, Android, MAC OSXからは繋げるのにWindows10からは繋げない事があったので対策方法をメモしておきます。
現象としてはWindows7では正常に繋げたがWindows10アップグレード後に繋げなくなった感じです。

以下、対応手順です。

  1. 左下Windowsボタンを右クリック
  2. ネットワーク接続(W)を押下
  3. 繋ぎたいネットワークアダプタを右クリック
  4. 以下の画像にある赤枠のチェックボックスにチェックを入れOKを押下

WS000008

これで通常通りタスクトレイ内にあるネットワークインターネットアクセスよりVPNを選択して接続します。
多分、繋げると思います・・・

参考サイト
Windows10のL2TP接続 ■セカイVPN■

Go言語で皆大好き htpdate を書いてみた

PCやサーバの時間合わせにntpdateを通常用いますが、80番と443番しか外部接続を許されないネットワークだとNTPが使えない事があります。そんな時にNTPの代替としてWEBサーバの時間を元にマシンの時間を合わせるコマンドが”htpdate”です。

仕組はHTTPのレスポンスヘッダに含まれる”Date”を元にソコソコ正確な時間を取得してOSの時間を設定します。
とても単純明快で清々しいくらいです。

例えばこのサーバだと、このようなレスポンスヘッダが帰ってきます。
この中の「Date: Wed, 08 Apr 2015 11:35:10 GMT」がサーバの時間となります。

HTTP/1.1 200 OK
Date: Wed, 08 Apr 2015 11:35:10 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Fri, 29 Jun 2012 10:40:46 GMT
ETag: "16e07e-5-4c39a14ab6780"
Accept-Ranges: bytes
Content-Length: 5
Connection: close
Content-Type: text/html

# vi htpdate.go

package main

import (
  "os"
  "fmt"
  "time"
  "syscall"
  "net/http"
)

// HTTPサーバへアクセスしてヘッダーからアクセス日時を取得する関数
func get_http_date(url string) (string, error) {
  response, err := http.Get(url)
  if err != nil { return "", err }

  access_time := response.Header.Get("Date")
  return access_time, nil
}

// 引数として受け取ったUNIXタイムをOSの時間に設定する関数
func settime(sec int64, usec int64) error {
  tv := syscall.Timeval{ Sec: sec, Usec: usec }

  return os.NewSyscallError("settimeofday", syscall.Settimeofday(&tv))
}

func main() {
  if len(os.Args) > 1 {
    // とりあえずHTTPサーバを1個だけ引数に受け取る
    host_name  := os.Args[1]
    target_url := "http://" + host_name

    // HTTPサーバからアクセス日時を取得
    access_time, err := get_http_date(target_url)
    if err != nil {
      fmt.Fprintln(os.Stderr, "Failed to access the HTTP server.")
      os.Exit(1)
    }

    // 取得した時間をパーズする
    server_time, err := time.Parse(time.RFC1123, access_time)
    if err != nil {
      fmt.Fprintln(os.Stderr, "Time of format is not a RFC1123.")
      os.Exit(1)
    }

    // 取得した時間をOSの時間として設定する
    if err := settime(server_time.Unix(), 0); err != nil {
      fmt.Fprintln(os.Stderr, "Failed to set the date and time.")
      os.Exit(1)
    }

    fmt.Println(time.Now())
    os.Exit(0)
  } else {
    fmt.Fprintln(os.Stderr, "Please set the HTTP server to argument.")
    os.Exit(1)
  }
}

実行してみると時間が設定される事が分かるはずです。
# go run htpdate.go orsx.net

2015-04-08 21:05:18.000046645 +0900 JST

Proxyなどは対応していませんがGo言語を勉強するうえで良い教材になりそうな気がしたので簡単に実装してみました。

[HTTP Time Protocol / htpdate] Webプロキシを経由して時刻を同期するの巻 – TrippyBoyの愉快な日々
Introduction | HTTP Time Protocol

CentOS7 ネットワーク設定 消えた ifconfig と system-config-network について

CentOS7がリリースされましたのでネットワークについて若干メモを残しておきます。

CentOS6以前は以下のコマンドでIPアドレスを確認していました

# ifconfig

CentOS7以降は以下のコマンドを使うようになるみたいです

# ip addr show

CentOS6以前は以下のコマンドを使用してネットワークやIPアドレスの設定をしていました

# system-config-network

CentOS7以降は以下のコマンドを使用してネットワークやIPアドレスの設定を行うようです

対話式の場合
# nmtui

コマンドラインベース
# nmcli

Perl IPアドレスを10進数の整数型に変換し戻す

データベースにIPアドレスを格納する時は整数型にしたほうがブロックで検索出来たりと後々取り扱いが楽だったりするので変換する変換方法を書いてみる

#!/usr/bin/perl
use utf8;
use strict;
use warnings;

my $addr_i = &addr_s_to_i("192.168.1.1");
my $addr_s = &addr_i_to_s($addr_i);
print "INTEGER:" . $addr_i . "\n";
print "STRING :" . $addr_s . "\n";

# IPアドレスを文字列型から整数型に変換
sub addr_s_to_i {
    my $addr = shift;

    # "."ごとに8bitずつ区切りそれを2進数に変換し配列に入れる
    my @addrs;
    foreach my $addr_split (split('\.', $addr)){
        push(@addrs, sprintf("%08b", $addr_split));
    }

    # 区切った2進数を連結する
    my $bin = join('', @addrs);
    # 2進数を10進数に変換
    my $result = oct('0b' . $bin);

    return $result;
}

# IPアドレスを整数型から文字列型に変換
sub addr_i_to_s {
    my $addr = shift;

    # 10進数を32bitの2進数に変換
    my $bin = sprintf("%032b", $addr);

    # 2進数を8bitごとに区切り10進数に変換し配列に入れる
    my @addrs;
    foreach my $addr_split ($bin =~ m/.{8}/g){
        push(@addrs, oct('0b' . $addr_split));
    }

    # "."ごとに区切り連結する
    my $result = join('.', @addrs);

    return $result;
}

実行結果
INTEGER:3232235777
STRING :192.168.1.1

YAMAHA RTX1200を導入 L2TP PPTP NAT FW設定例の公開

我が家ではRT58iを長い間利用しておりましたが、いい加減Gigabit対応していこうと今回、RTX1200を購入しました。
NVR500と悩んだ結果、PCと違い長い間お世話になることを考えると少しでもいいものを購入しておいたほうが後で後悔しないだろうということでこちらを買いました。

過去、何処は言えませんがとあるメーカーの安いルータを使用したところ我が家の過酷な環境に耐えられなく数ヶ月で壊れるという事件も起きましたので・・・
RT58iは、そのような我が家の環境でも故障もトラブルも一度も発生させずに長いこと利用できていました。

そんな訳で、YAMAHAのルータは素晴らしいです。

あ、えーっと。この子のお値段は聞かないでください。気がついたらお財布の中が空になってしましました。。。

開封・・・
IMG_1549[1]

IMG_1550[1]

IMG_1552[1]

設定は色々前回のルータから引き継ぎなら下記のようにしてみました。
我が家では固定8IPで運用しております。そのため一般家庭の方は参考にできない部分もあるかもしれませんが・・・・
VPNやNATやFWの設定はもしかすると必要とする人がいるかもしれないと期待して公開してみます。

VPNに関しては下記の環境で正常に動作することを確認しました。
PTPPは、Windows7、OS X Mountain Lion、iOS6.1.2
L2TPは、OS X Mountain Lion、iOS5.0、Android4.0.4
※ L2TPに関してはiOS6.1.2で接続が解除される問題が発生しており現在調査中です。
※ VPNをつないだ状態でWOLを送る事も可能にしております。

リセットの仕方
全面に付いている全て(3箇所)のボタンを同時に押しで電源を入れ完全に起動後に離すことでハードリセットを行うことが可能です。

administrator password *
security class 1 on off off
ip route default gateway pp 1
ip lan1 address 192.168.100.1/24
ip lan1 proxyarp on
ip lan1 secure filter in 100000 100001 100002 100003 100004 100005 190099
ip lan1 wol relay broadcast
ip lan2 nat descriptor 1
pp select 1
 pp always-on on
 pppoe use lan2
 pppoe auto disconnect off
 pp auth accept chap
 pp auth myname USERID PASSWORD
 ppp lcp mru on 1454
 ppp ipcp msext on
 ip pp secure filter in 200000 200001 200002 200003 200008 200009 200010 200011 200012 200013 200014 200015 200016 210000 210001 210002 210003 210004 220000 220001 220002 220003 220004 220005 220006 220007 220008 220009 220010 220011 220012 220013 220014 230000
 ip pp secure filter out 200004 200005 200006 200007 200008 200009 200010 200011 200012 200013 290099 dynamic 230098 230099
 ip pp intrusion detection in on reject=on
 ip pp intrusion detection out on reject=on
 ip pp nat descriptor 1
 pp enable 1
pp select anonymous
 pp bind tunnel1-tunnel2
 pp auth request mschap-v2
 pp auth username USERID PASSWROD
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ppp ccp type mppe-any
 ip pp remote address pool 192.168.100.90-192.168.100.99
 ip pp mtu 1258
 pp enable anonymous
tunnel select 1
 tunnel encapsulation l2tp
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes-cbc sha-hmac
  ipsec ike keepalive use 1 off
  ipsec ike local address 1 192.168.100.1
  ipsec ike nat-traversal 1 on
  ipsec ike payload type 1 3
  ipsec ike pre-shared-key 1 text PASSWROD
  ipsec ike remote address 1 any
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 l2tp keepalive log on
 l2tp syslog on
 ip tunnel tcp mss limit auto
 tunnel enable 1
tunnel select 2
 tunnel encapsulation pptp
 pptp tunnel disconnect time off
 tunnel enable 2
ip filter 100000 reject * * udp,tcp 135 *
ip filter 100001 reject * * udp,tcp * 135
ip filter 100002 reject * * udp,tcp netbios_ns-netbios_dgm *
ip filter 100003 reject * * udp,tcp * netbios_ns-netbios_dgm
ip filter 100004 reject * * udp,tcp netbios_ssn *
ip filter 100005 reject * * udp,tcp * netbios_ssn
ip filter 100006 reject * * udp,tcp 445 *
ip filter 100007 reject * * udp,tcp * 445
ip filter 190099 pass * * * * *
ip filter 200000 reject * 192.168.100.200/29 icmp * *
ip filter 200001 reject 172.16.0.0/12 * * * *
ip filter 200002 reject 192.168.0.0/16 * * * *
ip filter 200003 reject 192.168.100.0/24 * * * *
ip filter 200004 reject * 10.0.0.0/8 * * *
ip filter 200005 reject * 172.16.0.0/12 * * *
ip filter 200006 reject * 192.168.0.0/16 * * *
ip filter 200007 reject * 192.168.100.0/24 * * *
ip filter 200008 reject * * udp,tcp 135 *
ip filter 200009 reject * * udp,tcp * 135
ip filter 200010 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 200011 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 200012 reject * * udp,tcp 445 *
ip filter 200013 reject * * udp,tcp * 445
ip filter 200014 pass * * icmp * *
ip filter 200015 pass * * established * *
ip filter 200016 pass * * tcp * ident
ip filter 210000 pass * 192.168.100.1 esp * *
ip filter 210001 pass * 192.168.100.1 gre * *
ip filter 210002 pass * 192.168.100.1 udp * 500
ip filter 210003 pass * 192.168.100.1 tcp * 1723
ip filter 210004 pass * 192.168.100.1 udp * 4500
ip filter 220000 pass * 192.168.100.100/29 tcp * ftpdata
ip filter 220001 pass * 192.168.100.100/29 tcp * ftpdata
ip filter 220002 pass * 192.168.100.100/29 tcp * 21
ip filter 220003 pass * 192.168.100.100/29 tcp * 22
ip filter 220004 pass * 192.168.100.100/29 tcp * telnet
ip filter 220005 pass * 192.168.100.100/29 tcp * smtp
ip filter 220006 pass * 192.168.100.100/29 tcp * domain
ip filter 220007 pass * 192.168.100.100/29 tcp * 57
ip filter 220008 pass * 192.168.100.100/29 tcp * 58
ip filter 220009 pass * 192.168.100.100/29 tcp * www
ip filter 220010 pass * 192.168.100.100/29 tcp * pop3
ip filter 220011 pass * 192.168.100.100/29 tcp * ntp
ip filter 220012 pass * 192.168.100.100/29 tcp * imap2
ip filter 220013 pass * 192.168.100.100/29 tcp * https
ip filter 220014 pass * 192.168.100.100/29 tcp * 587
ip filter 290099 pass * * * * *
ip filter dynamic 230098 * * tcp
ip filter dynamic 230099 * * udp
nat descriptor type 1 nat-masquerade
nat descriptor address outer 1 A.B.C.0-A.B.C.7
nat descriptor static 1 1 A.B.C.1=192.168.100.101 7
nat descriptor masquerade static 1 1 192.168.100.1 gre
nat descriptor masquerade static 1 2 192.168.100.1 tcp 1723
nat descriptor masquerade static 1 3 192.168.100.1 esp
nat descriptor masquerade static 1 4 192.168.100.1 udp 500
nat descriptor masquerade static 1 5 192.168.100.1 udp 4500
ipsec auto refresh on
ipsec transport 1 101 udp 1701
syslog notice on
syslog debug on
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.90/24
dns server pp 1
schedule at 1 */* 00:00 * ntpdate ntp.nc.u-tokyo.ac.jp
pptp service on
l2tp service on

YAMAHAルータの利用者が増えるといいですね。