Solaris 10 Zonennetzwerkkonfiguration

Solaris 10 Zonennetzwerkkonfiguration

Ich teste Zonen auf Solaris 10, Release 10/09 (s10x_u8wos_08a) mit Generic_142901-04-Kernel.

Der Hostserver verfügt über zwei physische Netzwerkkarten (bnx0 und bnx1), und da ich beabsichtige, mehrere (drei oder mehr) Zonen zu betreiben, kommt es nicht in Frage, einer Zone eine Netzwerkkarte zuzuweisen. Derzeit habe ich diesen Zonen keine „dedizierten“ IP-Adressen zugewiesen, daher erhalte ich Leases von DHCP.

Meine Fragen, auf die wir zurückkommen werden, nachdem ich Ihnen mein aktuelles Setup gezeigt habe, drehen sich hauptsächlich um diese Netzwerkkonfiguration.

Hier sind die Schritte (mit einigen zusätzlichen Informationen), die ich zum Einrichten der Zone ausgeführt habe:

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

Ich fuhr mit der Installation der Zone fort

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.

Einige Pakete haben also Fehler generiert, aber das beunruhigt mich nicht weiter, da ich sie in dieser Zone sowieso nicht benötige.

Die Installation wurde trotzdem mit Null beendet.

erikn@global:~ $ echo $?
0

Ich habe die Zone hochgefahren

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

Und mit der "Konsole" verbunden.

erikn@global:~ $ pfexec zlogin -C test

Ich habe die Installation befolgt; eine Sprache auswählen (Englisch), das Gebietsschema festlegen (USA (en_US.ISO8859-1)), den Terminaltyp festlegen (DEC VT100), einen Hostnamen vergeben (Test), die Zeitzone festlegen (Europa/Oslo), ein Root-Passwort festlegen („password123“ – nein, nur ein Scherz).

Die Root-Shell wurde auf Bash geändert:

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

Abgemeldet und wieder angemeldet.

Da viele Dienste aktiviert waren (einschließlich Telnet und Finger), dachte ich, es wäre einfacher, alles zu deaktivieren und die Dienste dann erneut zu aktivieren, bis ich ein funktionierendes System hätte.

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

Dies führte wie erwartet dazu, dass die Zone in den Systemwartungsmodus wechselte.

Ich habe alle Meilensteindienste wieder aktiviert:

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

SSHD und Syslogd aktiviert.

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

Über Abhängigkeitsdienste geleitet, um sie zu aktivieren:

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

Konsolen-Login aktiviert und Status geprüft.

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

Die Zone wurde neugestartet.

-bash-3.00# reboot

Wurde von der Anmeldeaufforderung der Konsole begrüßt. Angemeldet. Dienststatus geprüft:

-bash-3.00# svcs -xv

Keine Ausgabe ist eine gute Ausgabe.

Habe die Zone angehalten und sicherheitshalber einen Snapshot von der globalen Zone gemacht.

-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

Danach habe ich die Zone erneut gestartet, die Abhängigkeitsreihenfolge der installierten Pakete ermittelt (mit dem Skript "pkgdep")hier zu finden) und habe einige der Sachen entfernt, die ich nicht brauchte.

Als Nächstes war es an der Zeit, das Netzwerk zu konfigurieren, worum es in dieser Frage geht.

Aus der globalen Zone habe ich ein logisches Interface erstellt und dieses der Zone "Test" zugeordnet.

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

Wir können überprüfen, ob dies der Zone zugewiesen wurde:

-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

Da die Zone nun mit dem IP-Typ „shared“ konfiguriert ist, kann sie keine DHCP-Anfragen über die Schnittstelle senden. Daher machen wir das von der globalen Zone aus:

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

Das lief nicht so gut, oder?

erikn@global:~ $ echo $?
4

Zurück in die Zone.

-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

Nun, wir haben eine IP-Adresse ... (Hier habe ich das Netzwerk durch 10.0.4.0/22 ​​ersetzt, aber die Netzmaske ist dieselbe).

Wir ändern unsere /etc/nsswitch.conf und /etc/resolv.conf, um unsere Nameserver zu verwenden.

Da wir in unserem Netzwerk einen HTTP-Proxy verwenden, müssen wir daran denken, diesen zu exportieren (ich lege ihn normalerweise in ~/.bash_profile ab).

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

Obwohl alles zu funktionieren scheint, ist es nicht perfekt. Kehren wir zur globalen Zone zurück.

Zuerst haben wir die echte bnx1-Schnittstelle, die auch DHCP verwendet.

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)

Dann haben wir unsere logische Schnittstelle:

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

Lassen Sie uns eine weitere logische Schnittstelle erstellen, diese jedoch keiner Zone zuweisen, sodass sie zur globalen Zone gehört:

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)

Das hat also ziemlich reibungslos funktioniert. Leider hilft es uns nicht viel.

Ich habe versucht, diese Schnittstelle an die Zone "Test" zu übergeben:

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

Darüber war man nicht sehr erfreut:

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

Und das Loslassen und erneute Starten des DHCP-Clients auf der Schnittstelle führt zum selben Ergebnis wie das, das wir letztes Mal gesehen haben:

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

Als letzten, verzweifelten Versuch habe ich versucht:

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

Kein solches Glück.

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

Meine Fragen sind im Wesentlichen:

  • Ist es überhaupt möglich, einer Solaris 10/09-Zone per DHCP IP-Adressen zuzuweisen, ohne ihr eine eigene physische Netzwerkkarte zuzuweisen?

  • Gehe ich das falsch an? Sollte ich stattdessen private IPs für die Zonen haben und den Hostcomputer NAT durchführen lassen? Ist das möglich?

Das Endziel besteht für mich darin, in jeder Zone unterschiedliche netzwerkverbundene Dienste auszuführen.

  • Es wird eine gewisse Netzwerkkommunikation zwischen den Zonen geben, und

  • Sie werden außerdem netzwerkzugängliche Dienste ausführen, die von anderen Hosts in unserem Netzwerk verwendet werden.

Antwort1

Die Funktionen der virtuellen Zonenschnittstelle sind teilweise eingeschränkt. Einige Zustände können nicht eingerichtet werden, Paketfilter funktionieren in der Zone ebenfalls nicht. Wenn ich mich recht erinnere, kann die Zonenschnittstelle keine Ethernet-Broadcasts senden, also kein DHCP.

Übrigens, warum machst du so viel Aufhebens um die Einrichtung der Zonenschnittstelle? Was ist damit?

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

Es erbt die Netzmaske von der globalen Zonenschnittstelle. Natürlich können Sie weitere Schnittstellen einrichten oder die Zone nur auf der „internen“ Schnittstelle (keine öffentliche IP) einrichten und dann ipfbereitstellen NAT.

verwandte Informationen