vyatta 6.6R1にバージョンアップ

vyattaのバージョンアップを久しぶりに実施した。
6.5R1がリリースされた際にすぐに実施したのだが、なんか不安定だったので、6.4に戻していました。

こんな情報がありました。
この情報をたよりにいろいろと調べてみると、やはり6.5の時から問題が発生していたようです。
以前、不安定だったのはこれが原因のようです。(リリースされてすぐに6.5適用したから情報がなかったんだな。。)
こんなところ、よほどじゃないと疑わないよね。。。

せっかくなので、本当かどうか調べてみました。まずは、6.4でpppoe側をダンプ。

6.4-mss

mtuは1454に設定している。mssは1412と自動調整されていますね。

6.6R1にバージョンアップ後、同様にダンプすると。。。
6.6-mss

mtuは1454で設定しているのに、mssは1460になっていて調整されていない。。。。
これが原因なんですね。

サイトにあるように、policyでinterfaceにINするSYNパケットを1414にセットします。
mtuが1454だら、ヘッダ40として1414って訳ですね。R6.4の時は1412に調査されているようだが、
まっ、40バイトでいいでしょう。
こんな感じでpolicy追加。LAN側はbridge設定しているのでbridge インターフェイスに適用しました。ethXでは、変化なかった。

set policy route PPPOE-IN rule 10 destination address 0.0.0.0/0
set policy route PPPOE-IN rule 10 protocol tcp
set policy route PPPOE-IN rule 10 tcp flags 'SYN,!ACK,!FIN,!RST'
set policy route PPPOE-IN rule 10 set tcp-mss 1414
set interface bridge br2 policy route PPPOE-IN

さて、同様にダンプすると。。。ちゃんとmssが1414に設定されています。
6.6-mss-change

とりあえず、これでOKとしよう。しかしなんでこんなリグレっぽいことが放置されているのだ??

 

Open vSwitch on FreeBSD (jail間通信 port VLAN)

openvswitchはvlanも設定できるみたいですね。
という訳で、port vlanのテスト。

まずは3台目のjail(host03)を10.10.10.3/24で接続して、既存のjailとの通信を確認。
まだVLANは設定していない。

# ifconfig epair2 create
# ifconfig epair2a up
# ovs-vsctl add-port br0 epair2a
# ovs-vsctl show
bed35e5d-cc0a-4594-84e2-d7d1369ccaaf
    Bridge "br0"
        Port "epair1a"
            Interface "epair1a"
        Port "br0"
            Interface "br0"
                type: internal
        Port "epair2a"
            Interface "epair2a"
        Port "epair0a"
            Interface "epair0a"

# ifconfig epair2b vnet host03
# jexec host03 ifconfig epair2b 10.10.10.3 netmask 255.255.255.0
# jexec host03 ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2): 56 data bytes
64 bytes from 10.10.10.2: icmp_seq=0 ttl=64 time=0.428 ms
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=0.178 ms
^C
--- 10.10.10.2 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.178/0.303/0.428/0.125 ms

次に、VLANの設定をしてみる。環境は、こんな感じ。
jail-connect3

openvswitch上でport vlanを設定する
epair0aおよびepair1aのportをvlan 60に設定
epair2aのportをvlan 70に設定

# ovs-vsctl del-port br0 epair0a   (一度portを削除) 
# ovs-vsctl add-port br0 epair0a tag=60 (vlan 60にして再度追加)
# ovs-vsctl del-port br0 epair1a
# ovs-vsctl add-port br0 epair1a tag=60
# ovs-vsctl del-port br0 epair2a
# ovs-vsctl add-port br0 epair2a tag=70
# ovs-vsctl show
bed35e5d-cc0a-4594-84e2-d7d1369ccaaf
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
        Port "epair0a"
            tag: 60
            Interface "epair0a"
        Port "epair2a"
            tag: 70
            Interface "epair2a"
        Port "epair1a"
            tag: 60
            Interface "epair1a"

epair2aはvlan設定していないので、host01およびhost02からhost03への通信はできなくなり、
host01およびhost02では通信可能なはず。
やってみる。

# jexec host01 ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2): 56 data bytes
64 bytes from 10.10.10.2: icmp_seq=0 ttl=64 time=0.597 ms
^C
--- 10.10.10.2 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.597/0.597/0.597/0.000 ms
# jexec host01 ping 10.10.10.3
PING 10.10.10.3 (10.10.10.3): 56 data bytes
^C
--- 10.10.10.3 ping statistics ---
2 packets transmitted, 0 packets received, 100.0% packet loss
# jexec host02 ping 10.10.10.1
PING 10.10.10.1 (10.10.10.1): 56 data bytes
64 bytes from 10.10.10.1: icmp_seq=0 ttl=64 time=0.220 ms
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=0.150 ms
^C
--- 10.10.10.1 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.150/0.185/0.220/0.035 ms
root@freebsd-ovs:/root # jexec host02 ping 10.10.10.3
PING 10.10.10.3 (10.10.10.3): 56 data bytes
^C
--- 10.10.10.3 ping statistics ---
2 packets transmitted, 0 packets received, 100.0% packet loss

想定どおりになっています。ちゃんと動くんだな。。。

試しにhost01に相当するepair0aをvlan 70に移動させてみます。
host01からhost03へpingが可能になるはず。

# ovs-vsctl del-port br0 epair0a
# ovs-vsctl add-port br0 epair0a tag=70
# jexec host01 ping 10.10.10.3
PING 10.10.10.3 (10.10.10.3): 56 data bytes
64 bytes from 10.10.10.3: icmp_seq=0 ttl=64 time=0.434 ms
64 bytes from 10.10.10.3: icmp_seq=1 ttl=64 time=0.153 ms
^C
--- 10.10.10.3 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.153/0.293/0.434/0.141 ms

想定通りの動きですね。

 

Open vSwitch on FreeBSD (jail間通信)

簡単な実験なのでワンオフで。

jail-connect
今回はFreeBSD内での閉じたネットワークで通信テストしただけ。

root# /usr/local/etc/rc.d/ovsdb-server onestart
 (/usr/local/etc/openvswitch/配下にdbが作成される)
Starting ovsdb_server.
root# /usr/local/etc/rc.d/ovs-vswitchd onestart
 (dbとconnectされます)
root# ovs-vsctl show
9a89b0cd-ddf0-4bb8-9d35-2b077c3009f8
まだ何もない。。

jailで通信できるようにepairインターフェイスを作成(2台分)

#ifconfig epair0 create
#ifconfig epair1 create
#ifconfig -a (抜粋)
epair0a: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=8<VLAN_MTU>
	ether 02:64:82:00:05:0a
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
	status: active
epair0b: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=8<VLAN_MTU>
	ether 02:64:82:00:06:0b
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
	status: active
epair1a: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=8<VLAN_MTU>
	ether 02:80:4c:00:07:0a
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
	status: active
epair1b: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=8<VLAN_MTU>
	ether 02:80:4c:00:08:0b
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
	status: active

ブリッジ(br0)を作成。

root# ovs-vsctl add-br br0
root# ovs-vsctl show
bed35e5d-cc0a-4594-84e2-d7d1369ccaaf
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal

ifconfig で br0は表示されません

#ovs-vsctl set bridge br0 datapath_type=netdev
# ifconfig br0 (br0が表示されるようになります)
br0: flags=28943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,PPROMISC> metric 0 mtu 1500
	options=80000<LINKSTATE>
	ether 8a:01:5d:29:89:48
	inet6 fe80::2bd:b8ff:fec4:400%br0 prefixlen 64 scopeid 0x6 
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
	Opened by PID 1729

epair0aとepair1aをbr0スイッチへ接続します。

root# ovs-vsctl add-port br0 epair0a
root# ovs-vsctl add-port br0 epair1a
root# ovs-vsctl show
bed35e5d-cc0a-4594-84e2-d7d1369ccaaf
    Bridge "br0"
        Port "epair1a"
            Interface "epair1a"
        Port "br0"
            Interface "br0"
                type: internal
        Port "epair0a"
            Interface "epair0a"

jail起動

#jail -c vnet host.hostname=host01 name=host01 path=/home/jail/host01 persist
#jail -c vnet host.hostname=host02 name=host02 path=/home/jail/host02 persist
#mount -t devfs dev /home/jail/host01/dev
#mount -t devfs dev /home/jail/host02/dev
#jls
# jls
   JID  IP Address      Hostname                      Path
     3  -               host01                        /usr/home/jail/host01
     4  -               host02                        /usr/home/jail/host02

epair0bおよびepair1bをjailで使えるように割当

#ifconfig epair0b vnet 3
#ifconfig epair1b vnet 4
#ifconfig -a
  epair0b, epair1bは表示されなくなる
各jailでifconfigでepairXbが見えるか確認。
# jexec 3 ifconfig -a
lo0: flags=8008<LOOPBACK,MULTICAST> metric 0 mtu 16384
	options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
epair0b: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=8<VLAN_MTU>
	ether 02:64:82:00:06:0b
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
	media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
	status: active
# jexec 4 ifconfig -a
lo0: flags=8008<LOOPBACK,MULTICAST> metric 0 mtu 16384
	options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
epair1b: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=8<VLAN_MTU>
	ether 02:80:4c:00:08:0b
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
	media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
	status: active

jailのhost01およびhost02でepair0b, epari1bが見えるようになります。

jailのhost01およびhost02でipを振る

# jexec host01 ifconfig epair0b 10.10.10.1 netmask 255.255.255.0
# jexec host02 ifconfig epair1b 10.10.10.2 netmask 255.255.255.0

各hostからpingを打ってみる

# jexec host01 ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2): 56 data bytes
64 bytes from 10.10.10.2: icmp_seq=0 ttl=64 time=0.235 ms
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=0.157 ms
^C
--- 10.10.10.2 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.157/0.196/0.235/0.039 ms
# jexec host02 ping 10.10.10.1
PING 10.10.10.1 (10.10.10.1): 56 data bytes
64 bytes from 10.10.10.1: icmp_seq=0 ttl=64 time=0.223 ms
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=0.144 ms
^C
--- 10.10.10.1 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.144/0.183/0.223/0.039 ms

br0にem0を追加し、em0の代わりにbr0にipを設定することで、FreeBSD外のマシンとの通信も可能になります。
もちろんそれぞれのjail(host01/host02)のIPも192.168.0.0/24に変更。
こんな感じ。
jail-connect2

 

VIMAGE/jail と Open vSwitch (準備)

仮想化はどんどん進化してくれるのはうれしいのですが、何でもかんでもクラウド、広域なノンストップサービスとか好き放題言う人好きくないです。
さてさて、ちまたでOpenFlowとかよく話題に上っていますが。。。
まあ、そんなの現在あんまり興味ありません。
しかし、そんな事も言ってられない方向に。。Orz..

OpenFlowはopenvswitchでやれるだのなんだの。。。openvswitchなんて使ったことないけど、いろんなことができるそうで。。。
openvswitchとかKVM関連の話かと思っていたのですが、FreeBSDとかでも動くみたいですね。

普段はESXi上でサーバのテストやネットのテストをやっていましたが、せっかくなので、FreeBSDのVIMAGE使ってopenvswitch使った仮想通信でもやってみようと。。。

VIMAGE使うためには、FreeBSDのカーネル再構築が必要です。
実験なので、FreeBSD 9.1のVMを新規に作成しました。

#cd /usr/src/sys/amd64/conf
#cp GENERIC VIMAGE
#vi VIMAGE  (下記を追加)
--
ident VIMAGE (GENERICからVIMAGEへ変更)
options VIMAGE
--
#cd /usr/src
#make buildkernel KERNCONF=VIMAGE
#make installkernel KERNCONF=VIMAGE
#reboot

openvswitchをportsでインストール (ver.1.7.1)

# /usr/ports/net/openvswitch
# make
# make install
# /usr/local/etc/rc.d/

jailでhost01環境。メモ

# mkdir /home/jail/host01
# cd /usr/src
# make buildworld DESTDIR=/home/jail/host01
# make installworld DESTDIR=/home/jail/host01
# cd /usr/src/etc
# make distribution DESTDIR=/home/jail/host01
# jail -c vnet name=host01 path=/home/jail/host01 persist
# mount -t devfs dev /home/jail/host01/dev

準備はこんな感じ。

 

awstats + nginx

awstatsの7.1が出てたのでアップグレード。
tools/nginxディレクトリにnginxの設定例とphpからperl動作させるcgi付属。

今までは無理矢理fcgiwrapper使ってperl使ってました。これを機に少し奇麗にしました。

% cp awstats/tools/nginx/awstats-fcgi.php awstats/wwwroot/cgi-bin/
% chmod u+x awstats/wwwroot/cgi-bin/awstats.pl

awstats.plに実行権をついてなくて少しはまった。

nginxの設定は、tools/nginx/awstats-nginx.confを参考に記載。

php-fpmもblog用のpoolと内部用のpoolに分けて管理することにしました。
内部用はセキュリティも甘くてもよいので、userの実行件で稼働させてます。