SEIL/x86 で遊んでみる(フレッツ回線への接続)

折角SEIL/x86を購入したので、弄り倒してみたいと思います。

今回は、ブロードバンドルータとして一般的な「フレッツ回線への接続」を試してみます。

設定例については SEILのソリューションページ に詳しく解説されているので、こちらを参考にしました。

ソリューション

構成図:

SEIL/x86 フレッツ接続の設定

PPPoEの設定:


# ppp add bflets keepalive 30 ipcp enable ipcp-address on ipcp-dns on ipv6cp enable authentication-method chap identifier <フレッツのID> passphrase <フレッツのパスワード> tcp-mss auto

インタフェースの設定:


# interface lan1 delete all
# interface pppoe0 ppp-configuration flets

(下記設定については工場出荷時のものを使用)
# interface lan0 add 192.168.0.1/24
# interface pppoe0 over lan1

ルーティングの設定:
(工場出荷時の設定をそのまま使用)


# route add default pppoe0

NAPT(IP Masquerade)の設定:
(工場出荷時の設定をそのまま使用)


# nat napt add private 192.168.0.0-192.168.255.255 interface pppoe0

DHCPの設定:
(工場出荷時の設定をそのまま使用)


# dhcp enable
# dhcp mode server
# dhcp interface lan0 enable
# dhcp interface lan0 expire 24
# dhcp interface lan0 pool 192.168.0.2 253
# dhcp interface lan0 dns add 192.168.0.1

DNSフォワーダの設定:


# dns forwarder enable
# dns forwarder add ipcp

パスワードの設定:


# password admin
(新パスワードを設定)
# password user
(新パスワードを設定)

sshの設定:


# sshd enable

フィルタの設定:


filter add manage_telnet interface pppoe0 direction in protocol tcp dstport 23 action block
filter add manage_ssh interface pppoe0 direction in protocol tcp dstport 22 action block

ネットワークの接続確認

PPPoEの接続状況を確認:


# show status ppp pppoe0
Interface: pppoe0
LCP state: opened
IPCP state: opened
IPv6CP state: stopped
BCP state: initial
LCP negotiated options:
magic number 0xaadd9b51
IPCP negotiated options:
address
primary dns address
secondary dns address
IPv6CP negotiated options:
none
BCP negotiated options:
none
keepalive: 30 seconds interval

インタフェースを確認:


# show status interface pppoe0
interface pppoe0:
Description=""
Status=LCP up (opened), administratively up
MTU=1454
LastChange=2001/01/01 09:05:00
Ipkts=2710248, Ierrs=0, Opkts=2555103, Oerrs=3, Colls=0
InOctets=276659337, OutOctets=614907355, InDrops=0, OutDiscards=3
InMulticastPkts=0, OutMulticastPkts=0
InUnknownProtos=0
IP address=a.b.c.d --> w.x.y.z netmask=255.255.255.255
IPv6 address=fe80::2e0:4dff:fe0d:206%pppoe0 --> :: prefixlen=64

ルーティングテーブルを確認:


# show status route
Flags: C - Connected, M - Miscellaneous, O - OSPF, R - RIP, S - Static
* - System route, ! - inconsistent

Destination Gateway Interface Flags Dist.
default pppoe0 pppoe0 S* 1
127.0.0.0/8 loopback loopback C* 0
w.x.y.z/32 pppoe0 pppoe0 C* 0
a.b.c.d 127.0.0.1 loopback M* -
224.0.0.0/4 127.0.0.1 loopback M* -

(w.x.y.z/32 は フレッツ POI の Point-To-Point アドレス)
(a.b.c.d は フレッツで割り当てられたアドレス)

pppoeの接続状況が "show status ppp pppoe0" で確認できるので分かりやすいですね。

付録: VMware Player で複数インタフェースを利用するには

VMware Player を使う場合は、通常のインストールをしただけでは複数のインタフェースが扱えません。以下のような手順で設定をする必要があります。

vmnetcfg.exe をインストール

コマンドプロンプトから VMware Player のインストーラを実行し、ファイルを展開する


C:\> VMware-player-3.1.0-261024.exe /e C:\tmp\VMwarePlayer3

  • 展開されたファイルの中に network.cab ファイルがあるので、それをさらに展開すると vmnetcfg.exe が取り出せる
  • 取り出した vmnetcfg.exe は適当なディレクトリにコピーしておく
  • vmnetcfg.exe を実行すると、VMwareネットワークの設定ができる
カスタムネットワークの設定
  • vmnetcfg.exe を実行することで VMnet* を設定することができるようになった
  • 但し、GUI上からは VMnet* を指定することができないので .vmxファイルを直接編集して書き換える必要がある

seilx86.vmx 設定変更例:


ethernet0.connectionType = "custom"
ethernet0.vnet = "VMnet2"
ethernet1.connectionType = "custom"
ethernet1.vnet = "VMnet3"
ethernet2.connectionType = "custom"
ethernet2.vnet = "VMnet4"

SEIL/x86 で遊んでみる (measure機能)

最近はクラウドサービスが続々と提供されており、高機能なサービスを短時間で提供できるようになってきました。本当に便利な世の中になりましたね。

しかしながら、インターネット経由のサービスは大変便利ではありますが、ネットワークが快適に使えているかどうかを客観的に計測するのは意外に面倒なことです。

そのような時にはルータ間で速度計測をすると傾向が掴めます。今回は、SEIL/x86 を用いたネットワークの計測を試してみました。SEILシリーズ には iperf機能 が組み込まれております。市販のルータ機器ではオープンソースの計測ツールの入っている物が見当たらなかったのですが、SEIL には入っておりました。すごいね、SEIL。

SEIL/x86 を社内ネットワーク等に用意しておけば、いつでも速度計測ができて便利です。

クライアント側:
下記の例では、100Mbps (transfer-rate 100), 60秒(duration 60)にてサーバと通信します。
計測結果は Bandwidth の項目に表示されます(以下の例では 94.2 Mbits/sec)


# measure iperf client <サーバのIPアドレス> transfer-rate 100 duration 60
###################################################################
# ATTENTION: THIS PROGRAM IS SENDING TRAFFIC TO THE NETWORK. #
# notice: when you want to exit this program, please type Ctrl-C. #
###################################################################

                                                                                                                      • -

Client connecting to , UDP port 5001
Sending 1280 byte datagrams
UDP buffer size: 73.7 Kbit (default)

                                                                                                                      • -

[ 3] local 10.0.0.120 port 65530 connected with 10.0.0.111 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-60.0 sec 5.65 Gbits 94.2 Mbits/sec
[ 3] Sent 552036 datagrams
[ 3] Server Report:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-60.0 sec 4.91 Gbits 81.9 Mbits/sec 0.184 ms 72110/552036 (13%)

サーバ側:


# measure iperf server start

さらに便利な使い方としては、以下のように普通のunixサーバ(CentOSなど)を組み合わせても計測ができます。

Linuxを iperfサーバとして利用する際のポイントは、

  • UDPを用いる(-u)
  • length を指定する(-l 5000)

になります。

クライアント側:


vpc-edge# measure iperf client <サーバのIPアドレス> transfer-rate 65 duration 10
###################################################################
# ATTENTION: THIS PROGRAM IS SENDING TRAFFIC TO THE NETWORK. #
# notice: when you want to exit this program, please type Ctrl-C. #
###################################################################

                                                                                                                      • -

Client connecting to , UDP port 5001
Sending 1280 byte datagrams
UDP buffer size: 73.7 Kbit (default)

                                                                                                                      • -

[ 3] local port 65125 connected with port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 639 Mbits 63.9 Mbits/sec
[ 3] Sent 62433 datagrams
[ 3] Server Report:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-10.0 sec 639 Mbits 63.9 Mbits/sec 0.188 ms 14/62433 (0.022%)

サーバ側(CentOS):


$ wget (iperf-2.0.5.tar.gz)
$ tar zxvf iperf-2.0.5.tar.gz
$ cd iperf-2.0.5
$ ./configure; make
$ cd src
$ ./iperf -u -s -l 5000
[ 3] local port 5001 connected with port 65126
[ 3] 0.0- 1.5 sec 3.75 KBytes 19.9 Kbits/sec 0.083 ms 0/ 2 (0%)
[ 3] 0.0- 1.5 sec 1 datagrams received out-of-order
[ 4] local port 5001 connected with port 65125
[ 4] 0.0-10.0 sec 76.2 MBytes 63.9 Mbits/sec 0.189 ms 14/62433 (0.022%)

Junos 良い日本語書籍が出ました

先日、会社の先輩に見せて頂いた本がとても素晴らしかったのでメモしておきます。

Junos 設定&管理 完全Bible

Junos 設定&管理 完全Bible

この「Junos設定&管理 完全Bible」という本は Juniper のL2SW(EXシリーズ)やルータについて、主要な機能を余すことなく解説しております。辞書的な使い方もできる便利な本です。

Ciscoは使えるけれどJuniperはサッパリ分からない、という人が読めばとても理解しやすい内容になっておりました。

英語が苦にならない人は Juniper が作成している「Day One」シリーズ等を読めば良いのですが、日本人にとっては日本語の情報が増えると嬉しいですね。

特に、OSPFについて熱く解説しているのは印象的でした(かなり痛い目に遭ったのかな..)

唯一解説されていない内容としては、SRXシリーズ固有の機能については含まれていないので別途「Junos Security」などを併読するのが良さそうです。

VMware vCloud Datacenter でVPCを構築したい

日本でも ソフトバンクテレコムVMware vCloud Datacenterサービスを提供することが決まったようです。

http://ascii.jp/elem/000/000/591/591195/

サービス内容の詳細は良く分からないのですが、企業ユーザであれば Amazon VPC と同じようなことが vCloud Datacenter でも出来ることを期待しているのではないかと思われます。

仮に パブリック側で VPC のような構成が取れない場合なども考えると Vyatta のようなソフトウェアルータを vm に組み込むのが良さそうです。

http://www.vyatta.com/

無償版で無くても良いので、VPNやリモート接続機能が充実していて日本人のサポートがキッチリと受けられる物が良い人には SEIL/x86 というのも良さそうです。

http://www.seil.jp/download/seil-x86/

もっとも、Vyatta の有償版(サブスクリプション版)は一番安いのでも 10万円弱/年 くらいだったはずなので community版を使わない限りは結構高いかもしれません。

日本の代理店のwebページを見ても、価格は載っていないようです。

http://www.emaginers.com/products_software.html

vyatta で Amazon VPC に接続

最近、Amazon VPC がどんどん機能強化されて目を見張るばかりです。

Vyatta を VPC の Customer Gataway として使えるかどうかテストした結果をまとめておきます。

試したこと

  • flet's回線経由で VPN Gateway に接続
  • vyattaルータの LANセグメントから EC2 instance に sshログイン
    • OK

結果

  • vyatta では IPsec仮想インタフェース が使えない
    • とりあえず ポリシベースの IPsec設定をしておき、iproute2 (または setkey)にて ポリシを書きかえることで通信はできた
    • この方法だと、折角BGPで経路交換しているのに 各Subnet をvyattaに設定しなければならないのが難点あ

Amazon VPC は IP-IPトンネルにも対応してくれると良いのに..と感じました。

ネットワーク構成


10.255.254.0/23 = VPC側の CIDR
10.255.252.0/23 = 顧客側の LANセグメント
169.254.255.0/30 = IPsec tunnel #1
.1 = VPN Gateway
.2 = Customer Gateway
169.254.255.4/30 = IPsec tunnel #2
.5 = VPN Gateway
.6 = Customer Gateway
1.2.3.4 = Customer Gateway
72.21.209.225 = VPN Gateway #1
72.21.209.193 = VPN Gateway #2

EC2
| 10.255.254.0/24
--------+----+----+---------------- (VPC Subnet)
:
| |
VPN-GW1 VPN-GW2
.225| |.193
| | 72.21.209.x/x
--------+--+------+---------------- (VPC Gateway)
|
: (The Internet)
|
Vyatta 1.2.3.4/32
| 10.255.252.0/24
-----------+----+------------------ (顧客側 LAN)
|
PC

コンフィグ (Vyatta Core 6.2)



interfaces {
ethernet eth0 {
duplex auto
hw-id 00:90:fb:0f:8a:c1
pppoe 0 {
default-route auto
mtu 1492
name-server auto
password
user-id
}
smp_affinity auto
speed auto
}
ethernet eth1 {
address 10.255.252.1/24
duplex auto
hw-id 00:90:fb:0f:8a:c0
smp_affinity auto
speed auto
}
ethernet eth2 {
duplex auto
hw-id 00:90:fb:0f:8a:bf
smp_affinity auto
speed auto
}
ethernet eth3 {
duplex auto
hw-id 00:90:fb:0f:8a:be
smp_affinity auto
speed auto
}
loopback lo {
address 169.254.255.2/32
address 169.254.255.6/32
}
}
protocols {
bgp 65000 {
neighbor 169.254.255.1 {
default-originate {
}
description vpn-4e06e227-0
remote-as 7224
soft-reconfiguration {
inbound
}
timers {
connect 10
holdtime 30
keepalive 30
}
}
neighbor 169.254.255.5 {
default-originate {
}
description vpn-4e06e227-1
remote-as 7224
soft-reconfiguration {
inbound
}
timers {
connect 10
holdtime 30
keepalive 30
}
}
network 0.0.0.0/0 {
}
}
static {
}
}
service {
ssh {
port 22
protocol-version v2
}
}
system {
config-management {
commit-revisions 20
}
console {
device ttyS0 {
speed 9600
}
}
host-name vyatta
login {
user vyatta {
authentication {
encrypted-password
}
level admin
}
}
ntp {
server 0.vyatta.pool.ntp.org {
}
server 1.vyatta.pool.ntp.org {
}
server 2.vyatta.pool.ntp.org {
}
}
package {
auto-sync 1
repository community {
components main
distribution stable
password ""
url http://packages.vyatta.com/vyatta
username ""
}
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
time-zone Asia/Tokyo
}
vpn {
ipsec {
esp-group ipsec-prop-vpn-4e06e227-0 {
compression disable
lifetime 3600
mode tunnel
pfs enable
proposal 1 {
encryption aes128
hash sha1
}
}
esp-group ipsec-prop-vpn-4e06e227-1 {
compression disable
lifetime 3600
mode tunnel
pfs enable
proposal 1 {
encryption aes128
hash sha1
}
}
ike-group isakmp-vpn-4e06e227-1 {
dead-peer-detection {
action hold
interval 15
timeout 30
}
lifetime 28800
proposal 1 {
dh-group 2
encryption aes128
hash sha1
}
}
ike-group keyring-vpn-4e06e227-0 {
dead-peer-detection {
action hold
interval 15
timeout 30
}
lifetime 28800
proposal 1 {
dh-group 2
encryption aes128
hash sha1
}
}
ipsec-interfaces {
interface pppoe0
}
site-to-site {
peer 72.21.209.193 {
authentication {
mode pre-shared-secret
pre-shared-secret
}
ike-group isakmp-vpn-4e06e227-1
local-ip 1.2.3.4
tunnel 0 {
allow-nat-networks disable
allow-public-networks disable
esp-group ipsec-prop-vpn-4e06e227-1
local-subnet 169.254.255.6/32
remote-subnet 169.254.255.4/30
}
tunnel 1 {
allow-nat-networks disable
allow-public-networks disable
esp-group ipsec-prop-vpn-4e06e227-1
local-subnet 10.255.252.0/24
remote-subnet 10.255.254.0/23
}
}
peer 72.21.209.225 {
authentication {
mode pre-shared-secret
pre-shared-secret
}
ike-group keyring-vpn-4e06e227-0
local-ip 1.2.3.4
tunnel 0 {
allow-nat-networks disable
allow-public-networks disable
esp-group ipsec-prop-vpn-4e06e227-0
local-subnet 169.254.255.2/32
remote-subnet 169.254.255.1/30
}
tunnel 1 {
allow-nat-networks disable
allow-public-networks disable
esp-group ipsec-prop-vpn-4e06e227-0
local-subnet 10.255.252.0/24
remote-subnet 10.255.254.0/23
}
}
}
}
}

xfrm.sh (コンフィグ設定後に実行)



#!/bin/sh

BGP_LOCAL_IP_1=169.254.255.2
BGP_LOCAL_IP_2=169.254.255.6
BGP_LOCAL_IP_SUBNET_1=169.254.255.0
BGP_LOCAL_IP_SUBNET_2=169.254.255.4
VPN_1_IP=72.21.209.225
VPN_2_IP=72.21.209.193
MY_WAN_IP=1.2.3.4
VPC_CIDR=10.255.254.0/23
MY_LOCAL_SUBNET_IP=10.255.252.0

ip xfrm policy update dir fwd src $BGP_LOCAL_IP_SUBNET_1/30 dst
$BGP_LOCAL_IP_1/32 tmpl src $VPN_1_IP dst $MY_WAN_IP proto esp level required
mode tunnel
ip xfrm policy update dir in src $BGP_LOCAL_IP_SUBNET_1/30 dst
$BGP_LOCAL_IP_1/32 tmpl src $VPN_1_IP dst $MY_WAN_IP proto esp level required
mode tunnel

ip xfrm policy update dir fwd src $BGP_LOCAL_IP_SUBNET_2/30 dst
$BGP_LOCAL_IP_2/32 tmpl src $VPN_2_IP dst $MY_WAN_IP proto esp level required
mode tunnel
ip xfrm policy update dir in src $BGP_LOCAL_IP_SUBNET_2/30 dst
$BGP_LOCAL_IP_2/32 tmpl src $VPN_2_IP dst $MY_WAN_IP proto esp level required
mode tunnel

ip xfrm policy update dir fwd src $VPC_CIDR dst $MY_LOCAL_SUBNET_IP/24 tmpl src
$VPN_1_IP dst $MY_WAN_IP proto esp level required mode tunnel
ip xfrm policy update dir in src $VPC_CIDR dst $MY_LOCAL_SUBNET_IP/24 tmpl src
$VPN_1_IP dst $MY_WAN_IP proto esp level required mode tunnel