Solaris 10 區域網路配置

Solaris 10 區域網路配置

我正在使用 Generic_142901-04 核心測試 Solaris 10 10/09 版 (s10x_u8wos_08a) 上的區域。

主機伺服器有兩個實體 NIC(bnx0 和 bnx1),並且由於我打算運行多個(三個或更多)區域,因此不可能將 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

我按照安裝進行了操作;選擇語言(英文),設定區域設定(美國(en_US.ISO8859-1)),終端機類型(DEC VT100),為其指定主機名稱(測試),設定時區(歐洲/奧斯陸),設定 root 密碼( “password123 ” - 不,只是開玩笑)。

將 root shell 更改為 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」腳本在這裡找到),並刪除了一些我不需要的東西。

接下來,是時候配置網路了,這就是這個問題的內容。

我從全域區域建立了一個邏輯介面並將其指派給區域“test”。

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]

儘管事情看起來很有效,但它並不完美。讓我們回到全域區域。

首先我們有真正的 bnx1 接口,它也使用 DHCP。

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...

我的問題基本上是:

  • 是否可以讓 DHCP 為 Solaris 10/09 區域分配 IP,而不為其提供自己的實體 NIC?

  • 我是否以錯誤的方式處理這個問題?我是否應該為區域提供私有 IP 並讓主機執行 NAT?那可能嗎?

我的最終目標是在每個區域中運行不同的網路連線服務。

  • 跨區域將會有一些網路通信,並且

  • 它們還將運行網路可存取的服務,這些服務將由我們網路上的其他主機使用。

答案1

區域虛擬介面的某些功能受到限制...某些狀態無法設置,資料包過濾器也無法在區域中運作。如果我沒記錯的話,區域介面無法發送乙太網路廣播,因此沒有 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)上,並讓ipf提供NAT

相關內容