web-dev-qa-db-ja.com

Solaris10ゾーンのネットワーク構成

Generic_142901-04カーネルを使用してSolaris10リリース10/09(s10x_u8wos_08a)でゾーンをテストしています。

ホストサーバーには2つの物理NIC(bnx0とbnx1)があり、複数(3つ以上)のゾーンを実行するつもりなので、ゾーン専用にNIC)することは問題外です。 、これらのゾーンに「専用」のIPアドレスが割り当てられていないため、DHCPからリースを取得しています。

私の現在の設定を示した後で戻る質問は、主にこのネットワーク構成を中心に展開します。

ゾーンを設定するために行った手順(いくつかの追加情報を含む)は次のとおりです。

erikn@global:~ $ zpool status zpool1
  pool: zpool1
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zpool1      ONLINE       0     0     0
          c1t1d0    ONLINE       0     0     0

errors: No known data errors

erikn@global:~ $ zfs list zpool1
NAME     USED  AVAIL  REFER  MOUNTPOINT
zpool1  84.1G   183G  6.14G  /zpool1

erikn@global:~ $ pfexec zfs create zpool1/zones

erikn@global:~ $ pfexec zfs set mountpoint=/zones zpool1/zones

erikn@global:~ $ pfexec zonecfg -z test \
> 'create -b ;
> set zonepath=/zones/test ;
> verify ;
> commit'

erikn@global:~ $ zoneadm list -vic
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              native   shared
   - test             configured /zones/test                    native   shared

ゾーンのインストールに進みました

erikn@global:~ $ pfexec zoneadm -z test install
A ZFS file system has been created for this zone.
Preparing to install zone <test>.
Creating list of files to copy from the global zone.
Copying <196614> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1595> packages on the zone.
Initialized <1595> packages on zone.
Zone <test> is initialized.
Installation of these packages generated errors: <SUNWvbox SUNWpostgr-83-server-data-root CSWcacertificates CSKmysql32 SUNWpostgr-82-libs SUNWpostgr-82-server SUNWpostgr-82-client SUNWpostgr-82-devel CSKphp5 SUNWpostgr-82-contrib CSKapache2 SUNWpostgr-82-server-data-root>
Installation of <1> packages was skipped.
The file </zones/test/root/var/sadm/system/logs/install_log> contains a log of the zone installation.

そのため、一部のパッケージでエラーが発生しましたが、このゾーン内では必要ないため、それほど問題にはなりません。

とにかくインストールはゼロで終了しました。

erikn@global:~ $ echo $?
0

ゾーンを起動しました

erikn@global:~ $ pfexec zoneadm -z test boot

そして「コンソール」に接続します。

erikn@global:~ $ pfexec zlogin -C test

私はインストールに従いました。言語の選択(英語)、ロケールの設定(USA(en_US.ISO8859-1))、端末タイプ(DEC VT100)、ホスト名の指定(テスト)、タイムゾーンの設定(ヨーロッパ/オスロ)、ルートパスワードの設定( 「password123」-いいえ、冗談です)。

ルートシェルをbashに変更しました:

# usermod -s /usr/bin/bash root
UX: usermod: root is currently logged in, some changes may not take effect until next login.

ログアウトして再度ログインします。

有効なサービス(telnetやfingerを含む)がたくさんあったので、システムが機能するまで、すべてを無効にしてからサービスを再度有効にする方が簡単だと思いました。

-bash-3.00# svcs | grep " svc:" | sed "s/ \{1,\}/ /g" | cut -d' ' -f3 | \
> xargs svcadm disable

これを行うと、予想どおり、ゾーンがシステムメンテナンスモードになりました。

すべてのmilstoneサービスを再度有効にしました。

-bash-3.00# svcs -a | grep " svc:/milestone/" | sed "s/ \{1,\}/ /g" | \
> cut -d' ' -f3 | xargs svcadm enable

Sshdとsyslogdを有効にしました。

-bash-3.00# svcadm enable svc:/network/ssh:default
-bash-3.00# svcadm enable svc:/system/system-log:default

依存関係サービスをループし、それらを有効にします。

-bash-3.00# while [ $( svcs -xv | wc -l ) -gt 0 ] ; do
> svcs -xv | grep "^svc" | cut -d' ' -f1 | xargs svcadm enable
> done
Hostname: test
Reading ZFS config: done.

コンソールログインを有効にし、ステータスを確認しました。

-bash-3.00# svcadm enable svc:/system/console-login:default

-bash-3.00# svcs -xv
svc:/system/console-login:default (Console login)
 State: offline since August 27, 2012 11:38:04 AM CEST
Reason: Unknown.
   See: http://Sun.com/msg/SMF-8000-AR
   See: man -M /usr/share/man -s 1M ttymon
Impact: This service is not running.

ゾーンを再起動しました。

-bash-3.00# reboot

コンソールログインプロンプトが表示されました。ログインしました。サービスステータスを確認しました:

-bash-3.00# svcs -xv

出力がないことは良い出力です。

ゾーンを停止し、適切な測定のためにグローバルゾーンからスナップショットを取得しました。

-bash-3.00# halt
Aug 27 12:10:08 test halt: halted by root
Aug 27 12:10:09 test syslogd: going down on signal 15

[NOTICE: Zone halted]
~.
[Connection to zone 'test' console closed]

erikn@global:~ $ pfexec zfs snapshot zpool1/zones/test@neat

この後、ゾーンを再度起動し、インストールされたパッケージの依存関係の順序を把握し(これを使用して、「pkgdep」スクリプト ここにあります )、実行しなかったものをいくつか削除しました。必要ありません。

次に、ネットワークを構成するときが来ました。これがこの質問の内容です。

グローバルゾーンから、論理インターフェイスを作成し、ゾーン「テスト」に割り当てました。

erikn@global:~ $ pfexec ifconfig bnx1:1 plumb zone test

これがゾーンに割り当てられたことを確認できます。

-bash-3.00# ifconfig bnx1:1
bnx1:1: flags=1100842<BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4> mtu 1500 index 5
        inet 0.0.0.0 netmask 0

現在、ゾーンはIPタイプ「共有」で構成されているため、インターフェイスでDHCP要求を送信できません。したがって、グローバルゾーンから実行します。

erikn@global:~ $ pfexec ifconfig bnx1:1 dhcp start
ifconfig: bnx1:1: wait timed out, operation still pending...

それはうまくいきませんでした、今はうまくいきましたか?

erikn@global:~ $ echo $?
4

ゾーンに戻ります。

-bash-3.00# ifconfig bnx1:1
bnx1:1: flags=1104843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,ROUTER,IPv4> mtu 1500 index 5
        inet 10.0.6.92 netmask fffffc00 broadcast 10.0.7.255

さて、IPアドレスがあります...(ここでは、ネットワークを10.0.4.0/22に置き換えましたが、ネットマスクは同じです)。

ネームサーバーを使用するように/etc/nsswitch.confと/etc/resolv.confを変更します。

ネットワークでHTTPプロキシを使用しているので、それをエクスポートすることを忘れないでください(通常は〜/ .bash_profileに配置します)

-bash-3.00# export http_proxy=http://proxy.example.com:8080

-bash-3.00# /usr/sfw/bin/wget http://www.google.com
--2012-08-27 13:03:30--  http://www.google.com/
Resolving proxy.example.com... 10.0.7.17
Connecting to proxy.example.com|10.0.7.17|:8080... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.google.no/ [following]
--2012-08-27 13:03:40--  http://www.google.no/
Connecting to proxy.example.com|10.0.7.17|:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `index.html'

    [ <=>                                   ] 11,343      --.-K/s   in 0s

2012-08-27 13:03:40 (65.3 MB/s) - `index.html' saved [11343]

物事は機能しているように見えますが、それは完璧ではありません。グローバルゾーンに戻りましょう。

まず、DHCPを使用している実際のbnx1インターフェイスがあります。

erikn@global:~ $ ifconfig bnx1 dhcp status
Interface  State         Sent  Recv  Declined  Flags
bnx1       BOUND         2357  1558       778
(Began, Expires, Renew) = (08/27/2012 12:09, 08/31/2012 12:09, 08/29/2012 12:09)

次に、論理インターフェイスがあります。

erikn@global:~ $ ifconfig bnx1:1 dhcp status
Interface  State         Sent  Recv  Declined  Flags
bnx1:1     PRE_BOUND       20    14         6

別の論理インターフェースを作成しましょう。ただし、これはどのゾーンにも与えないため、グローバルゾーンに属します。

erikn@global:~ $ pfexec ifconfig bnx1:2 plumb

erikn@global:~ $ pfexec ifconfig bnx1:2 dhcp start

erikn@global:~ $ echo $?
0

erikn@global:~ $ ifconfig bnx1:2
bnx1:2: flags=1104843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,ROUTER,IPv4> mtu 1500 index 5
        inet 10.0.6.123 netmask fffffc00 broadcast 10.0.7.255

erikn@global:~ $ ifconfig bnx1:2 dhcp status
Interface  State         Sent  Recv  Declined  Flags
bnx1:2     BOUND            5     4         1
(Began, Expires, Renew) = (08/27/2012 13:11, 08/31/2012 13:11, 08/29/2012 13:11)

だからそれはかなり完璧に機能しました。残念ながら、それは私たちにはあまり役に立ちません。

そのインターフェイスをゾーン「テスト」に渡そうとしました。

erikn@global:~ $ pfexec ifconfig bnx1:2 zone test
erikn@global:~ $ echo $?
0

それについてはあまり幸せではありませんでした:

erikn@global:~ $ ifconfig bnx1:2 dhcp status
Interface  State         Sent  Recv  Declined  Flags
bnx1:2     DECLINING        6     4         2

また、インターフェイスでDHCPクライアントを新たにリリースして起動すると、前回見たのと同じ結果になります。

erikn@global:~ $ pfexec ifconfig bnx1:2 dhcp release

erikn@global:~ $ pfexec ifconfig bnx1:2 dhcp start
ifconfig: bnx1:2: wait timed out, operation still pending...

最後の必死の試みとして、私は次のことを試みました。

erikn@global:~ $ pfexec ifconfig bnx1:2 plumb \
> netmask 0xfffffc00 \
> broadcast 10.0.7.255 \
> zone test \
> up

そのような運はありません。

erikn@global:~ $ pfexec ifconfig bnx1:2 dhcp start
ifconfig: bnx1:2: wait timed out, operation still pending...

私の質問は基本的に:

  • SNMPにSolaris 10/09ゾーンのIPを割り当てても、物理的なNIC独自の)を与えることはできませんか?

  • 私はこれを間違った方法で行っていますか?代わりに、ゾーン用のプライベートIPを用意し、ホストコンピューターにNATを実行させる必要がありますか?それは可能ですか?

私の最終目標は、各ゾーンで異なるネットワーク接続サービスを実行することです。

  • ゾーン間でネットワーク通信が行われ、

  • また、ネットワーク上の他のホストによって使用されるネットワークアクセス可能なサービスを実行する予定です。

1
erikano

ゾーン仮想インターフェースにはいくつかの機能が制限されています...一部の状態はセットアップできず、パケットフィルターはゾーンでも機能しません。私の記憶が正しければ、ゾーンインターフェイスはイーサネットブロードキャストを送信できないため、DHCPは送信されません。

ところで、なぜあなたはゾーンインターフェースの設定についてその肥大化をしているのですか?これはどうですか?

pfexec zonecfg -z test
> 'create -b ;
> set zonepath=/zones/test ;
> add net ;
> set physica=bnx1 ;
> set address=10.0.6.92 ;
> end ;
> verify ;
> commit'

グローバルゾーンインターフェイスからネットマスクを継承します。もちろん、より多くのインターフェースをセットアップすることも、ゾーンを「内部」インターフェース(パブリックIPなし)にのみ配置して、ipfNATを提供させることもできます。

0
nudzo