SlideShare a Scribd company logo
1 of 32
Vyatt
                  a Co
                      re 6.4
                               対応

Vyatta 改造入門
浅間 正和 @ 有限会社 銀座堂
もくじ

•   Vyatta 改造の流れ

•   詳解 CLI 定義ファイル

•   実例: MAP 機能の追加
Vyatta 改造の流れ
                           Vyatta のソースコードを管理しているサーバ




 ② ソースコードの入手               ③ ビルド環境の構築
                           ④ パッケージの準備
                           ⑤ CLI 定義ファイルの準備
                           ⑥ ISO イメージの作成

                                出来た ISO イメージで
① ビルド環境の準備
                                    インストール


  ビルド環境: Debian GNU/Linux 6(Squeeze)/i386    インストールターゲット
ソースコードの入手
       •   ソースコードは Git で管理されている
       •   build-iso というリポジトリがメイン
       •   build-iso の pkgs 内にその他のパッケージの
           ソースコードが用意される
#   apt-get update
#   apt-get install git-core
$   git clone http://git.vyatta.com/build-iso.git
$   cd build-iso
$   git checkout --track -b oxnard origin/oxnard
$   less README
                       ※ oxnard は Vyatta のコードネームで 6.4 を表します。
                       ※ コードネームは Vyatta のロードマップで確認できます。
                         - http://www.vyatta.org/documentation/product-roadmap
ソースコードの入手
                        ※ vyatta-cfg-* は設定モードに関するパッケージです。
$ git submodule init    ※ vyatta-op-* は一般モードに関するパッケージです。
$ ls pkgs/
barnyard2              ppp                   vyatta-ipv6-rtradv
conntrack-tools        squashfs              vyatta-keepalived
daq                    squidguard            vyatta-lldp
...
linux-firmware         vyatta-cfg-system     vyatta-snort
linux-image            vyatta-cfg-vpn        vyatta-strongswan
live-initramfs         vyatta-cluster        vyatta-util
...

          ※ iptables や linux-image(kernel) のように Debian のものをそのまま使わず
            Vyatta で独自に手を入れたものもここに含まれます。

$ git submodule update pkgs/linux-image
$ cd pkgs/linux-image
$ git checkout --track -b oxnard origin/oxnard
ビルド環境の構築
•   最新情報は build-iso/README に書かれている
    ので必ず読む
•   基本的には Debian のパッケージで構築するが
    一部(squashfs-tools 等)は Vyatta 独自パッケージ
    を用いる
•   Vyatta のパッケージをインストールした際
    Debian のものに置き換わらないよう /etc/pat/
    preferences.d 内に Pin を打つ必要がある
パッケージの準備
     •   既存の Vyatta パッケージを改造したい:
         ☞   build-iso/pkgs 内のソースコードを改造後以下の
             コマンドを実行(linux-image の例)
                           ※ make (パッケージ名) で build-iso/pkgs ディレクトリ
$ make clean-linux-image   内に “パッケージ名_バージョン.deb” というファイル
$ make linux-image
                           が生成されます。

     •   新しくパッケージを組み込みたい:
         ☞   build-iso/pkgs ディレクトリに .deb パッケージ
             を置き build-iso/livecd/config.vyatta/chroot_local-
             packageslists/hoge.list に列挙する
CLI 定義ファイルの準備


 核心なので後ほど詳しく説明します!
ISO イメージの作成
     •   あとは簡単♪
$ export PATH=/sbin:/usr/sbin:$PATH
$ autoreconf -i
$ ./configure
$ sudo make iso
$ ls livecd/
auto            cache                           mk.livecd
binary          chroot                          mk.livecd.conf
binary.iso      config                          mk.livecd.conf.in
binary.list     config.vyatta                   mk.livecd.functions
binary.packages livecd-1209171135-25e07fb.iso   templates

      ※ 上記の例で livecd-1209171135-25e07fb.iso が生成された ISO イメージです。
      ※ sudo 経由でコマンドを実行する場合実行ユーザが sudo グループに属して
        いる必要があります。
ちなみに...
     •   configure 実行時に以下のオプションをつける
         と仮想化環境用の ISO イメージが作られます

$ ./configure --with-kernel-flavor=586-vyatta-virt


     •   通常の ISO イメージと仮想化環境用の ISO イ
         メージでは以下の違いがあります
vyatta:
-linux-image-3.0.32-1-586-vyatta
vyatta-virt:
+linux-image-3.0.32-1-586-vyatta-virt
+open-vm-modules-3.0.32-1-586-vyatta-virt
+open-vm-tools
詳解 CLI 定義ファイル
# set interfaces ethernet eth0 address 192.168.1.1/24




       /opt/vyatta/share/vyatta-cfg/templates/
           interfaces/
               ethernet/
                    node.def
                    node.tag/
                         address/
                             node.def
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address

syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@)

delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)

allowed: echo "dhcp dhcpv6 <>"

val_help:   ipv4net; IP address and prefix length
val_help:   ipv6net; IPv6 address and prefix length
val_help:   dhcp; Dynamic Host Configuration Protocol
val_help:   dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address

syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

create: sudo
                       このノードの値の型を書く
               /opt/vyatta/sbin/vyatta-address add $VAR(../@)   $VAR(@)
         text	

 	

     : 文字列	

      	

 	

 bool	

 	

 : 論理値
delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)
         u32	

 	

      : 32bit 整数	

 	

 	

 macaddr	

 : MAC アドレス
allowed: ipv4	

 	

 "dhcp IPv4 アドレス	

 	

          echo           : dhcpv6 <>"          ipv6	

 	

 : IPv6 アドレス
         ipv4net	

      : IPv4 ネットワーク	

      ipv6net	

  : IPv6 ネットワーク
val_help:   ipv4net; IP address and prefix length
val_help:   ipv6net; IPv6 address and prefix length
val_help:   dhcp; Dynamic Host Configuration Protocol
val_help:   dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address

syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

                 タブ補完で表示されるヘルプを書く
create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@)

delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)

allowed: echo "dhcp dhcpv6 <>"

val_help:   ipv4net; IP address and prefix length
val_help:   ipv6net; IPv6 address and prefix length
val_help:   dhcp; Dynamic Host Configuration Protocol
val_help:   dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address

syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@)

delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)

allowed: echo "dhcp dhcpv6 <>"
                         値の制約条件を書く
val_help: ipv4net; IP address and prefix length
val_help: ipv6net; : IPv6 address and prefixbrN(N は整数))
        syntax	

              	

    主に値のフォーマット (Ex: length
val_help: dhcp; Dynamic Host Configuration Protocol
        commit	

  : 主に値の整合性チェック (Ex: 他の必須項目有無)
val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address

syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@)

delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)

           $VAR(...) は対応する引数に置き換えられる
allowed: echo "dhcp dhcpv6 <>"
        $VAR(@)	

 : この node.def に対応する値 (Ex: 192.168.1.1/24)
val_help: ipv4net; IP address and prefix length
val_help: ipv6net; : IPv6 address and prefix length
        $VAR(../@)	

 ひとつ前の node.tag の値 (Ex: eth0)
val_help: dhcp; Dynamic Host Configuration 時も値を参照可能
        $VAR(@@)	

: $VAR(@) と同じだが delete Protocol
val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address     commit 時のアクションを定義
syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@)

delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)

allowed: echo "dhcp dhcpv6 <>"

val_help:   ipv4net; IP address and prefix length
val_help:   ipv6net; IPv6 address and prefix length
val_help:   dhcp; Dynamic Host Configuration Protocol
val_help:   dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address

syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

                           許容される値の一覧
commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@)

delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)

allowed: echo "dhcp dhcpv6 <>"

val_help:   ipv4net; IP address and prefix length
val_help:   ipv6net; IPv6 address and prefix length
val_help:   dhcp; Dynamic Host Configuration Protocol
val_help:   dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address

syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

create: sudo
                      値の型に応じた詳細なヘルプ
               /opt/vyatta/sbin/vyatta-address add $VAR(../@)   $VAR(@)

delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)

allowed: echo "dhcp dhcpv6 <>"

val_help:   ipv4net; IP address and prefix length
val_help:   ipv6net; IPv6 address and prefix length
val_help:   dhcp; Dynamic Host Configuration Protocol
val_help:   dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.tag/address/node.def:

multi:
type: txt
help: IP address

syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"

commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl
             複数の値を設定できる場合は multi: と書く
                          --valid-addr-commit $VAR(@@) --dev $VAR(../@)"

create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@)

delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@)

allowed: echo "dhcp dhcpv6 <>"

val_help:   ipv4net; IP address and prefix length
val_help:   ipv6net; IPv6 address and prefix length
val_help:   dhcp; Dynamic Host Configuration Protocol
val_help:   dhcpv6; Dynamic Host Configuration Protocol for IPv6
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.def:

tag:
priority: 318
type: txt
help: Ethernet interface name
allowed: /opt/vyatta/sbin/vyatta-interfaces.pl --show=ethernet
val_help: <ethN>; Ethernet interface name
syntax:expression: pattern $VAR(@) "^eth[0-9]+$" 
        node.tag と同じディレクトリ階層には tag: と書く
                   ; "interface ethernet $VAR(@): not a valid name"

syntax:expression: exec 
    "if [ ! -d /sys/class/net/$VAR(@) ]; then 
        echo "interface ethernet $VAR(@): does not exist";
        exit 1; 
    fi"

begin: rm -f /tmp/speed-duplex.$VAR(@)
        if [ -d "/sys/class/net/$VAR(@)" ]; then
           if [ -n "$VAR(mac/@)" ]; then
... (省略) ...
詳解 CLI 定義ファイル
templates/interfaces/ethernet/node.def:

tag:
priority: 318
type: txt
help: Ethernet interface name
allowed: /opt/vyatta/sbin/vyatta-interfaces.pl --show=ethernet
val_help: <ethN>; Ethernet interface name
syntax:expression: pattern $VAR(@) "^eth[0-9]+$" 
                   ; "interface ethernet $VAR(@): not a valid name"
             commit 時の処理実行の優先度を指定する
syntax:expression: exec 
    "if [ ! -d /sys/class/net/$VAR(@) ]; then 
        echo "interface ethernet $VAR(@): does not exist";
        exit 1; 
    fi"

begin: rm -f /tmp/speed-duplex.$VAR(@)
        if [ -d "/sys/class/net/$VAR(@)" ]; then
           if [ -n "$VAR(mac/@)" ]; then
... (省略) ...
詳解 CLI 定義ファイル
          アクション一覧

 begin      commit 開始時

 create     新規に設定する時

 update   既存の設定値を変更する時

 delete     設定を削除する時

  end       commit 終了時
詳解 CLI 定義ファイル
           expression: 書式一覧

 pattern    pattern $VAR(@) “^br[0-9]+$”

  exec     exec “.../valid_address $VAR(@)”

  cond      $VAR(@) in “enable”, “disable”

  and      $VAR(@) >= 0 && $VAR(@) < 64

   or      $VAR(@) == “auto” || pattern ...
詳解 CLI 定義ファイル
# set interfaces ethernet eth0 address 192.168.1.1/24

/opt/vyatta/config/からの相対          すでにアドレスが設定されている場合は
active/interfaces                     その値がかかれている
active/interfaces/ethernet        まだ設定されていない場合は存在しない
active/interfaces/ethernet/eth0
active/interfaces/ethernet/eth0/address
active/interfaces/ethernet/eth0/address/node.val 
tmp/new_config_25193/interfaces
tmp/new_config_25193/interfaces/.modified
                                              新しい値が書かれている
tmp/new_config_25193/interfaces/ethernet
tmp/new_config_25193/interfaces/ethernet/.modified
tmp/new_config_25193/interfaces/ethernet/eth0
tmp/new_config_25193/interfaces/ethernet/eth0/.modified
tmp/new_config_25193/interfaces/ethernet/eth0/address
tmp/new_config_25193/interfaces/ethernet/eth0/address/.modified
tmp/new_config_25193/interfaces/ethernet/eth0/address/node.val
詳解 CLI 定義ファイル
#!/usr/bin/perl

use lib "/opt/vyatta/share/perl5";
use Vyatta::Config;

my $config = new Vyatta::Config;

@curr = $config->returnValues('interfaces ethernet');
@orig = $config->returnOrigValues('interfaces ethernet');

print "curr:n";
foreach my $v (@curr) { print "t[$v]n";}

print "orig:n";
foreach my $v (@orig) { print "t[$v]n";}


                     詳しくは /opt/vyatta/share/perl5/Vyatta/Config.pm を参照…
実例: MAP 機能の追加
• MAP とは?
☞ 現在 IETF で標準化が進められている IPv4
    サービスを IPv6 インフラの上で提供する為
    のプロトコル
☞   IPv6 アドレスと Mapping Rule から機械的に
    IPv4 アドレスを計算する
☞   プロバイダ側に NAPT 機能を必要としない
☞   http://enog.jp/~masakazu/vyatta/map/  
実例: MAP 機能の追加
• どうやって追加するの?
☞ Linux Kernel に手を入れる必要があるので
    linux-image とネットワーク関連の設定コマ
    ンドである iproute2 を改造する
☞   改造した iproute2 を実行する為の CLI 定義
    ファイルを用意しそれを vyatta-cfg-system に
    組み込む
☞   ISO イメージを作成しインストールする
実例: MAP 機能の追加
templates/interfaces/map/node.def:


tag:
priority: 380
type: txt
help: MAP interface
val_help: <mapN>; MAP interface name
syntax:expression: pattern $VAR(@) "^map[0-9]+$" 
                    ; "MAP interface must be (map0-map999)"

commit:expression: $VAR(./role/) != "" ; 
                   "Must configure the tunnel role for $VAR(@)"
commit:expression: $VAR(./tunnel-source/) != "" || $VAR(./role/@) == "br"; 
                   "Must configure the tunnel tunnel-source for $VAR(@)"
commit:expression: $VAR(./br-address/) != "" ; 
                   "Must configure the tunnel br-address for $VAR(@)"
commit:expression: $VAR(./default-forwarding-mode/) != "" ; 
                   "Must configure the tunnel default-forwar... for $VAR(@)"
... (続く) ...
実例: MAP 機能の追加
templates/interfaces/map/node.def:

... (続き) ...
create:
  if [ -n "$VAR(./tunnel-source/@)" ] ; then
     TS="tunnel-source $VAR(./tunnel-source/@)"
  fi
  if [ -n "$VAR(./default-forwarding-rule/@)" ] ; then
     DFR="default-forwarding-rule $VAR(./default-forwarding-rule/@)"
  fi
  if [ -n "$VAR(./always-napt/@)" ] ; then
     AN="always-napt $VAR(./always-napt/@)"
  fi
  ip map add $VAR(@) role $VAR(./role/@) $TS br-address $VAR(./br-address/@)
default-forwarding-mode $VAR(./default-forwarding-mode/@) $DFR $AN
  ip link set $VAR(@) up ||
     echo "interfaces MAP $VAR(@): error setting MAP interface active"

delete:
  ip link set $VAR(@) down
  ip map del $VAR(@)
実例: MAP 機能の追加
templates/interfaces/map/node.tag/role/node.def:
type: txt
help: Role of this MAP interface [REQUIRED]
syntax:expression: $VAR(@) in "br", "ce"; "Must be (br, ce)"
allowed: echo br ce
create:expression: "true"
update:expression: "false" ; "Role can only be set at MAP creation for
$VAR(../@)"
val_help: br; Role as BR
val_help: ce; Role as CE

templates/interfaces/map/node.tag/br-address/node.def:
type: ipv6net
val_help: ipv6net; IPv6 address and prefix length
help: BR IP address/prefix [REQUIRED]
syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)"
create:expression: "true"
update:expression: "false" ; "BR IP address/prefix can only be set at MAP
creation for $VAR(../@)"
まとめ

•   Vyatta なら簡単にルータを改造できます
•   CLI 定義ファイルはそんなに難しくありません
•   すでに書かれた膨大な数の CLI 定義ファイル
    があるので参考にしましょう
•   おもしろい改造をしたら是非
    vyatta-users@vyatta-users.jp に教えてください

More Related Content

What's hot

KeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するKeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するHitachi, Ltd. OSS Solution Center.
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxTakayuki Shimizukawa
 
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントVPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントTakuya Takaseki
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例briscola-tokyo
 
Microsoft Graph APIを活用した社内アプリケーション開発
Microsoft Graph APIを活用した社内アプリケーション開発Microsoft Graph APIを活用した社内アプリケーション開発
Microsoft Graph APIを活用した社内アプリケーション開発Yuki Hattori
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)シスコシステムズ合同会社
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Hiroyuki Wada
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...NTT DATA Technology & Innovation
 
富士通の生体認証ソリューションと提案
富士通の生体認証ソリューションと提案富士通の生体認証ソリューションと提案
富士通の生体認証ソリューションと提案FIDO Alliance
 
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編株式会社 NTTテクノクロス
 
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...VirtualTech Japan Inc.
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyYahoo!デベロッパーネットワーク
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13Amazon Web Services Japan
 

What's hot (20)

KeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するKeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
 
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントVPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
 
Microsoft Graph APIを活用した社内アプリケーション開発
Microsoft Graph APIを活用した社内アプリケーション開発Microsoft Graph APIを活用した社内アプリケーション開発
Microsoft Graph APIを活用した社内アプリケーション開発
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
 
富士通の生体認証ソリューションと提案
富士通の生体認証ソリューションと提案富士通の生体認証ソリューションと提案
富士通の生体認証ソリューションと提案
 
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
 
あなたのところに専用線が届くまで
あなたのところに専用線が届くまであなたのところに専用線が届くまで
あなたのところに専用線が届くまで
 

Viewers also liked

Unbreakable VPN using Vyatta/VyOS - HOW TO -
Unbreakable VPN using Vyatta/VyOS - HOW TO -Unbreakable VPN using Vyatta/VyOS - HOW TO -
Unbreakable VPN using Vyatta/VyOS - HOW TO -Naoto MATSUMOTO
 
Japan Vyatta Users Group Introduction
Japan Vyatta Users Group IntroductionJapan Vyatta Users Group Introduction
Japan Vyatta Users Group IntroductionNaoto MATSUMOTO
 
Software-Based Networking & Security for the Cloud
Software-Based Networking & Security for the CloudSoftware-Based Networking & Security for the Cloud
Software-Based Networking & Security for the CloudMatt Wolpin
 
Vyatta open cloudcampus 2011/08/02
Vyatta open cloudcampus 2011/08/02Vyatta open cloudcampus 2011/08/02
Vyatta open cloudcampus 2011/08/02Kentaro Ebisawa
 
Zimbra Collaboration Suite And Google Apps
Zimbra Collaboration Suite And Google AppsZimbra Collaboration Suite And Google Apps
Zimbra Collaboration Suite And Google Appsagileware
 
Vyatta lan interfaces-6.5_r1_v01
Vyatta lan interfaces-6.5_r1_v01Vyatta lan interfaces-6.5_r1_v01
Vyatta lan interfaces-6.5_r1_v01Nguyen Van Duy
 
Vyatta Ip Services Ref Vc5 V03
Vyatta Ip Services Ref Vc5 V03Vyatta Ip Services Ref Vc5 V03
Vyatta Ip Services Ref Vc5 V03Kittanun Nuaon
 
IBM Cognos 10 Under the Hood
IBM Cognos 10 Under the HoodIBM Cognos 10 Under the Hood
IBM Cognos 10 Under the HoodSenturus
 
Tiny Server Clustering using Vyatta/VyOS (MEMO)
Tiny Server Clustering using Vyatta/VyOS (MEMO)Tiny Server Clustering using Vyatta/VyOS (MEMO)
Tiny Server Clustering using Vyatta/VyOS (MEMO)Naoto MATSUMOTO
 
OpenStack Neutron Tutorial
OpenStack Neutron TutorialOpenStack Neutron Tutorial
OpenStack Neutron Tutorialmestery
 
IBM DataPower Gateway - Common Use Cases
IBM DataPower Gateway - Common Use CasesIBM DataPower Gateway - Common Use Cases
IBM DataPower Gateway - Common Use CasesIBM DataPower Gateway
 

Viewers also liked (15)

Unbreakable VPN using Vyatta/VyOS - HOW TO -
Unbreakable VPN using Vyatta/VyOS - HOW TO -Unbreakable VPN using Vyatta/VyOS - HOW TO -
Unbreakable VPN using Vyatta/VyOS - HOW TO -
 
Japan Vyatta Users Group Introduction
Japan Vyatta Users Group IntroductionJapan Vyatta Users Group Introduction
Japan Vyatta Users Group Introduction
 
Software-Based Networking & Security for the Cloud
Software-Based Networking & Security for the CloudSoftware-Based Networking & Security for the Cloud
Software-Based Networking & Security for the Cloud
 
VyattaCore TIPS2013
VyattaCore TIPS2013VyattaCore TIPS2013
VyattaCore TIPS2013
 
Unite! VYATTA APAC
Unite! VYATTA APACUnite! VYATTA APAC
Unite! VYATTA APAC
 
Vyatta open cloudcampus 2011/08/02
Vyatta open cloudcampus 2011/08/02Vyatta open cloudcampus 2011/08/02
Vyatta open cloudcampus 2011/08/02
 
Zimbra Collaboration Suite And Google Apps
Zimbra Collaboration Suite And Google AppsZimbra Collaboration Suite And Google Apps
Zimbra Collaboration Suite And Google Apps
 
Vyatta lan interfaces-6.5_r1_v01
Vyatta lan interfaces-6.5_r1_v01Vyatta lan interfaces-6.5_r1_v01
Vyatta lan interfaces-6.5_r1_v01
 
Vyatta Ip Services Ref Vc5 V03
Vyatta Ip Services Ref Vc5 V03Vyatta Ip Services Ref Vc5 V03
Vyatta Ip Services Ref Vc5 V03
 
IBM Cognos 10 Under the Hood
IBM Cognos 10 Under the HoodIBM Cognos 10 Under the Hood
IBM Cognos 10 Under the Hood
 
ASAMAP 開発秘話
ASAMAP 開発秘話ASAMAP 開発秘話
ASAMAP 開発秘話
 
Tiny Server Clustering using Vyatta/VyOS (MEMO)
Tiny Server Clustering using Vyatta/VyOS (MEMO)Tiny Server Clustering using Vyatta/VyOS (MEMO)
Tiny Server Clustering using Vyatta/VyOS (MEMO)
 
OpenStack Neutron Tutorial
OpenStack Neutron TutorialOpenStack Neutron Tutorial
OpenStack Neutron Tutorial
 
Fortigate Training
Fortigate TrainingFortigate Training
Fortigate Training
 
IBM DataPower Gateway - Common Use Cases
IBM DataPower Gateway - Common Use CasesIBM DataPower Gateway - Common Use Cases
IBM DataPower Gateway - Common Use Cases
 

Similar to Vyatta 改造入門

ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsmganeko
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...NTT DATA Technology & Innovation
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)Satoshi Shimazaki
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用Toshiki Tsuboi
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまでlestrrat
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2Takao Tetsuro
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud FoundryTomohiro Ichimura
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker74th
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
Samba4でADしよう!
Samba4でADしよう!Samba4でADしよう!
Samba4でADしよう!Yutaka Tsumori
 

Similar to Vyatta 改造入門 (20)

Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
Capistrano
CapistranoCapistrano
Capistrano
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
 
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまで
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
 
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
Samba4でADしよう!
Samba4でADしよう!Samba4でADしよう!
Samba4でADしよう!
 

More from Masakazu Asama

More from Masakazu Asama (7)

openconfigd
openconfigdopenconfigd
openconfigd
 
NETCONFとYANGの話
NETCONFとYANGの話NETCONFとYANGの話
NETCONFとYANGの話
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違い
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
 
VTI の中身
VTI の中身VTI の中身
VTI の中身
 
ASAMAP Update
ASAMAP UpdateASAMAP Update
ASAMAP Update
 
MAP 実装してみた
MAP 実装してみたMAP 実装してみた
MAP 実装してみた
 

Vyatta 改造入門

  • 1. Vyatt a Co re 6.4 対応 Vyatta 改造入門 浅間 正和 @ 有限会社 銀座堂
  • 2. もくじ • Vyatta 改造の流れ • 詳解 CLI 定義ファイル • 実例: MAP 機能の追加
  • 3. Vyatta 改造の流れ Vyatta のソースコードを管理しているサーバ ② ソースコードの入手 ③ ビルド環境の構築 ④ パッケージの準備 ⑤ CLI 定義ファイルの準備 ⑥ ISO イメージの作成 出来た ISO イメージで ① ビルド環境の準備 インストール ビルド環境: Debian GNU/Linux 6(Squeeze)/i386 インストールターゲット
  • 4. ソースコードの入手 • ソースコードは Git で管理されている • build-iso というリポジトリがメイン • build-iso の pkgs 内にその他のパッケージの ソースコードが用意される # apt-get update # apt-get install git-core $ git clone http://git.vyatta.com/build-iso.git $ cd build-iso $ git checkout --track -b oxnard origin/oxnard $ less README ※ oxnard は Vyatta のコードネームで 6.4 を表します。 ※ コードネームは Vyatta のロードマップで確認できます。 - http://www.vyatta.org/documentation/product-roadmap
  • 5. ソースコードの入手 ※ vyatta-cfg-* は設定モードに関するパッケージです。 $ git submodule init ※ vyatta-op-* は一般モードに関するパッケージです。 $ ls pkgs/ barnyard2 ppp vyatta-ipv6-rtradv conntrack-tools squashfs vyatta-keepalived daq squidguard vyatta-lldp ... linux-firmware vyatta-cfg-system vyatta-snort linux-image vyatta-cfg-vpn vyatta-strongswan live-initramfs vyatta-cluster vyatta-util ... ※ iptables や linux-image(kernel) のように Debian のものをそのまま使わず Vyatta で独自に手を入れたものもここに含まれます。 $ git submodule update pkgs/linux-image $ cd pkgs/linux-image $ git checkout --track -b oxnard origin/oxnard
  • 6. ビルド環境の構築 • 最新情報は build-iso/README に書かれている ので必ず読む • 基本的には Debian のパッケージで構築するが 一部(squashfs-tools 等)は Vyatta 独自パッケージ を用いる • Vyatta のパッケージをインストールした際 Debian のものに置き換わらないよう /etc/pat/ preferences.d 内に Pin を打つ必要がある
  • 7. パッケージの準備 • 既存の Vyatta パッケージを改造したい: ☞ build-iso/pkgs 内のソースコードを改造後以下の コマンドを実行(linux-image の例) ※ make (パッケージ名) で build-iso/pkgs ディレクトリ $ make clean-linux-image 内に “パッケージ名_バージョン.deb” というファイル $ make linux-image が生成されます。 • 新しくパッケージを組み込みたい: ☞ build-iso/pkgs ディレクトリに .deb パッケージ を置き build-iso/livecd/config.vyatta/chroot_local- packageslists/hoge.list に列挙する
  • 9. ISO イメージの作成 • あとは簡単♪ $ export PATH=/sbin:/usr/sbin:$PATH $ autoreconf -i $ ./configure $ sudo make iso $ ls livecd/ auto cache mk.livecd binary chroot mk.livecd.conf binary.iso config mk.livecd.conf.in binary.list config.vyatta mk.livecd.functions binary.packages livecd-1209171135-25e07fb.iso templates ※ 上記の例で livecd-1209171135-25e07fb.iso が生成された ISO イメージです。 ※ sudo 経由でコマンドを実行する場合実行ユーザが sudo グループに属して いる必要があります。
  • 10. ちなみに... • configure 実行時に以下のオプションをつける と仮想化環境用の ISO イメージが作られます $ ./configure --with-kernel-flavor=586-vyatta-virt • 通常の ISO イメージと仮想化環境用の ISO イ メージでは以下の違いがあります vyatta: -linux-image-3.0.32-1-586-vyatta vyatta-virt: +linux-image-3.0.32-1-586-vyatta-virt +open-vm-modules-3.0.32-1-586-vyatta-virt +open-vm-tools
  • 11. 詳解 CLI 定義ファイル # set interfaces ethernet eth0 address 192.168.1.1/24 /opt/vyatta/share/vyatta-cfg/templates/ interfaces/ ethernet/ node.def node.tag/ address/ node.def
  • 12. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl --valid-addr-commit $VAR(@@) --dev $VAR(../@)" create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) allowed: echo "dhcp dhcpv6 <>" val_help: ipv4net; IP address and prefix length val_help: ipv6net; IPv6 address and prefix length val_help: dhcp; Dynamic Host Configuration Protocol val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 13. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl --valid-addr-commit $VAR(@@) --dev $VAR(../@)" create: sudo このノードの値の型を書く /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) text : 文字列 bool : 論理値 delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) u32 : 32bit 整数 macaddr : MAC アドレス allowed: ipv4 "dhcp IPv4 アドレス echo : dhcpv6 <>" ipv6 : IPv6 アドレス ipv4net : IPv4 ネットワーク ipv6net : IPv6 ネットワーク val_help: ipv4net; IP address and prefix length val_help: ipv6net; IPv6 address and prefix length val_help: dhcp; Dynamic Host Configuration Protocol val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 14. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl --valid-addr-commit $VAR(@@) --dev $VAR(../@)" タブ補完で表示されるヘルプを書く create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) allowed: echo "dhcp dhcpv6 <>" val_help: ipv4net; IP address and prefix length val_help: ipv6net; IPv6 address and prefix length val_help: dhcp; Dynamic Host Configuration Protocol val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 15. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl --valid-addr-commit $VAR(@@) --dev $VAR(../@)" create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) allowed: echo "dhcp dhcpv6 <>" 値の制約条件を書く val_help: ipv4net; IP address and prefix length val_help: ipv6net; : IPv6 address and prefixbrN(N は整数)) syntax 主に値のフォーマット (Ex: length val_help: dhcp; Dynamic Host Configuration Protocol commit : 主に値の整合性チェック (Ex: 他の必須項目有無) val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 16. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl --valid-addr-commit $VAR(@@) --dev $VAR(../@)" create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) $VAR(...) は対応する引数に置き換えられる allowed: echo "dhcp dhcpv6 <>" $VAR(@) : この node.def に対応する値 (Ex: 192.168.1.1/24) val_help: ipv4net; IP address and prefix length val_help: ipv6net; : IPv6 address and prefix length $VAR(../@) ひとつ前の node.tag の値 (Ex: eth0) val_help: dhcp; Dynamic Host Configuration 時も値を参照可能 $VAR(@@) : $VAR(@) と同じだが delete Protocol val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 17. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address commit 時のアクションを定義 syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl --valid-addr-commit $VAR(@@) --dev $VAR(../@)" create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) allowed: echo "dhcp dhcpv6 <>" val_help: ipv4net; IP address and prefix length val_help: ipv6net; IPv6 address and prefix length val_help: dhcp; Dynamic Host Configuration Protocol val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 18. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" 許容される値の一覧 commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl --valid-addr-commit $VAR(@@) --dev $VAR(../@)" create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) allowed: echo "dhcp dhcpv6 <>" val_help: ipv4net; IP address and prefix length val_help: ipv6net; IPv6 address and prefix length val_help: dhcp; Dynamic Host Configuration Protocol val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 19. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl --valid-addr-commit $VAR(@@) --dev $VAR(../@)" create: sudo 値の型に応じた詳細なヘルプ /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) allowed: echo "dhcp dhcpv6 <>" val_help: ipv4net; IP address and prefix length val_help: ipv6net; IPv6 address and prefix length val_help: dhcp; Dynamic Host Configuration Protocol val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 20. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.tag/address/node.def: multi: type: txt help: IP address syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" commit:expression: exec "/opt/vyatta/sbin/vyatta-interfaces.pl 複数の値を設定できる場合は multi: と書く --valid-addr-commit $VAR(@@) --dev $VAR(../@)" create: sudo /opt/vyatta/sbin/vyatta-address add $VAR(../@) $VAR(@) delete: sudo /opt/vyatta/sbin/vyatta-address delete $VAR(../@) $VAR(@) allowed: echo "dhcp dhcpv6 <>" val_help: ipv4net; IP address and prefix length val_help: ipv6net; IPv6 address and prefix length val_help: dhcp; Dynamic Host Configuration Protocol val_help: dhcpv6; Dynamic Host Configuration Protocol for IPv6
  • 21. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.def: tag: priority: 318 type: txt help: Ethernet interface name allowed: /opt/vyatta/sbin/vyatta-interfaces.pl --show=ethernet val_help: <ethN>; Ethernet interface name syntax:expression: pattern $VAR(@) "^eth[0-9]+$" node.tag と同じディレクトリ階層には tag: と書く ; "interface ethernet $VAR(@): not a valid name" syntax:expression: exec "if [ ! -d /sys/class/net/$VAR(@) ]; then echo "interface ethernet $VAR(@): does not exist"; exit 1; fi" begin: rm -f /tmp/speed-duplex.$VAR(@) if [ -d "/sys/class/net/$VAR(@)" ]; then if [ -n "$VAR(mac/@)" ]; then ... (省略) ...
  • 22. 詳解 CLI 定義ファイル templates/interfaces/ethernet/node.def: tag: priority: 318 type: txt help: Ethernet interface name allowed: /opt/vyatta/sbin/vyatta-interfaces.pl --show=ethernet val_help: <ethN>; Ethernet interface name syntax:expression: pattern $VAR(@) "^eth[0-9]+$" ; "interface ethernet $VAR(@): not a valid name" commit 時の処理実行の優先度を指定する syntax:expression: exec "if [ ! -d /sys/class/net/$VAR(@) ]; then echo "interface ethernet $VAR(@): does not exist"; exit 1; fi" begin: rm -f /tmp/speed-duplex.$VAR(@) if [ -d "/sys/class/net/$VAR(@)" ]; then if [ -n "$VAR(mac/@)" ]; then ... (省略) ...
  • 23. 詳解 CLI 定義ファイル アクション一覧 begin commit 開始時 create 新規に設定する時 update 既存の設定値を変更する時 delete 設定を削除する時 end commit 終了時
  • 24. 詳解 CLI 定義ファイル expression: 書式一覧 pattern pattern $VAR(@) “^br[0-9]+$” exec exec “.../valid_address $VAR(@)” cond $VAR(@) in “enable”, “disable” and $VAR(@) >= 0 && $VAR(@) < 64 or $VAR(@) == “auto” || pattern ...
  • 25. 詳解 CLI 定義ファイル # set interfaces ethernet eth0 address 192.168.1.1/24 /opt/vyatta/config/からの相対 すでにアドレスが設定されている場合は active/interfaces その値がかかれている active/interfaces/ethernet まだ設定されていない場合は存在しない active/interfaces/ethernet/eth0 active/interfaces/ethernet/eth0/address active/interfaces/ethernet/eth0/address/node.val  tmp/new_config_25193/interfaces tmp/new_config_25193/interfaces/.modified 新しい値が書かれている tmp/new_config_25193/interfaces/ethernet tmp/new_config_25193/interfaces/ethernet/.modified tmp/new_config_25193/interfaces/ethernet/eth0 tmp/new_config_25193/interfaces/ethernet/eth0/.modified tmp/new_config_25193/interfaces/ethernet/eth0/address tmp/new_config_25193/interfaces/ethernet/eth0/address/.modified tmp/new_config_25193/interfaces/ethernet/eth0/address/node.val
  • 26. 詳解 CLI 定義ファイル #!/usr/bin/perl use lib "/opt/vyatta/share/perl5"; use Vyatta::Config; my $config = new Vyatta::Config; @curr = $config->returnValues('interfaces ethernet'); @orig = $config->returnOrigValues('interfaces ethernet'); print "curr:n"; foreach my $v (@curr) { print "t[$v]n";} print "orig:n"; foreach my $v (@orig) { print "t[$v]n";} 詳しくは /opt/vyatta/share/perl5/Vyatta/Config.pm を参照…
  • 27. 実例: MAP 機能の追加 • MAP とは? ☞ 現在 IETF で標準化が進められている IPv4 サービスを IPv6 インフラの上で提供する為 のプロトコル ☞ IPv6 アドレスと Mapping Rule から機械的に IPv4 アドレスを計算する ☞ プロバイダ側に NAPT 機能を必要としない ☞ http://enog.jp/~masakazu/vyatta/map/  
  • 28. 実例: MAP 機能の追加 • どうやって追加するの? ☞ Linux Kernel に手を入れる必要があるので linux-image とネットワーク関連の設定コマ ンドである iproute2 を改造する ☞ 改造した iproute2 を実行する為の CLI 定義 ファイルを用意しそれを vyatta-cfg-system に 組み込む ☞ ISO イメージを作成しインストールする
  • 29. 実例: MAP 機能の追加 templates/interfaces/map/node.def: tag: priority: 380 type: txt help: MAP interface val_help: <mapN>; MAP interface name syntax:expression: pattern $VAR(@) "^map[0-9]+$" ; "MAP interface must be (map0-map999)" commit:expression: $VAR(./role/) != "" ; "Must configure the tunnel role for $VAR(@)" commit:expression: $VAR(./tunnel-source/) != "" || $VAR(./role/@) == "br"; "Must configure the tunnel tunnel-source for $VAR(@)" commit:expression: $VAR(./br-address/) != "" ; "Must configure the tunnel br-address for $VAR(@)" commit:expression: $VAR(./default-forwarding-mode/) != "" ; "Must configure the tunnel default-forwar... for $VAR(@)" ... (続く) ...
  • 30. 実例: MAP 機能の追加 templates/interfaces/map/node.def: ... (続き) ... create: if [ -n "$VAR(./tunnel-source/@)" ] ; then TS="tunnel-source $VAR(./tunnel-source/@)" fi if [ -n "$VAR(./default-forwarding-rule/@)" ] ; then DFR="default-forwarding-rule $VAR(./default-forwarding-rule/@)" fi if [ -n "$VAR(./always-napt/@)" ] ; then AN="always-napt $VAR(./always-napt/@)" fi ip map add $VAR(@) role $VAR(./role/@) $TS br-address $VAR(./br-address/@) default-forwarding-mode $VAR(./default-forwarding-mode/@) $DFR $AN ip link set $VAR(@) up || echo "interfaces MAP $VAR(@): error setting MAP interface active" delete: ip link set $VAR(@) down ip map del $VAR(@)
  • 31. 実例: MAP 機能の追加 templates/interfaces/map/node.tag/role/node.def: type: txt help: Role of this MAP interface [REQUIRED] syntax:expression: $VAR(@) in "br", "ce"; "Must be (br, ce)" allowed: echo br ce create:expression: "true" update:expression: "false" ; "Role can only be set at MAP creation for $VAR(../@)" val_help: br; Role as BR val_help: ce; Role as CE templates/interfaces/map/node.tag/br-address/node.def: type: ipv6net val_help: ipv6net; IPv6 address and prefix length help: BR IP address/prefix [REQUIRED] syntax:expression: exec "/opt/vyatta/sbin/valid_address $VAR(@)" create:expression: "true" update:expression: "false" ; "BR IP address/prefix can only be set at MAP creation for $VAR(../@)"
  • 32. まとめ • Vyatta なら簡単にルータを改造できます • CLI 定義ファイルはそんなに難しくありません • すでに書かれた膨大な数の CLI 定義ファイル があるので参考にしましょう • おもしろい改造をしたら是非 vyatta-users@vyatta-users.jp に教えてください

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n