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.
따라서 일부 패키지에서는 오류가 발생했지만 어쨌든 이 영역 내에서는 필요하지 않기 때문에 크게 걱정하지 않습니다.
어쨌든 설치가 0으로 종료되었습니다.
erikn@global:~ $ echo $?
0
영역을 부팅했습니다.
erikn@global:~ $ pfexec zoneadm -z test boot
그리고 "콘솔"에 연결되었습니다.
erikn@global:~ $ pfexec zlogin -C test
나는 설치를 따랐다. 언어 선택(영어), 로케일 설정(미국(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.
로그아웃했다가 다시 로그인했습니다.
활성화된 서비스(텔넷 및 핑거 포함)가 많이 있었기 때문에 모든 것을 비활성화한 다음 작동하는 시스템이 있을 때까지 서비스를 다시 활성화하는 것이 더 쉬울 것이라고 생각했습니다.
-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]
모든 것이 작동하는 것처럼 보이지만 완벽하지는 않습니다. 전역 영역으로 돌아가 보겠습니다.
먼저 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...
내 질문은 기본적으로 다음과 같습니다.
자체 물리적 NIC를 제공하지 않고도 Solaris 10/09 영역에 대해 DHCP 할당 IP를 갖는 것이 가능합니까?
내가 잘못된 방향으로 가고 있는 걸까? 대신 영역에 대한 개인 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
.