Предположим, вы удаленно залогинились на Solaris-сервер, и вы знаете, что вы на самом деле находитесь внутри зоны. Как же узнать, что находится вокруг вас - скажем, ip или hostname глобальной зоны? Программисты SUN не позаботились о команде, c помощью которой из неглобальной зоны можно было бы получить информацию о глобальной (и понятно, почему).
Jamesd_wi, опытный системный администратор из штатов, описывает трюк, c помощью которого это можно узнать.
Сначала попытаемся выудить что-нибудь стандартными средствами:
# snoop
snoop: No network interface devices found
#
# prtdiag
prtdiag can only be run in the global zone
#
# prtconf
System Configuration: Sun Microsystems sun4u
Memory size: 2048 Megabytes
System Peripherals (Software Nodes):
prtconf: devinfo facility not available
# uname -av
SunOS t1 5.11 snv_69 sun4u sparc SUNW,Ultra-2
#
М-да, практически ничего. Что-ж, посмотрим хотя бы на вывод
ifconfig:
# ifconfig -a
lo0:1: flags=2001000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
qfe0:1: flags=1000843 mtu 1500 index 3
inet 192.168.3.202 netmask ffffff00 broadcast 192.168.3.255
Даже MAC-адрес не известен. Тут нам понадобится хост, находящийся в той же подсети, что и наша зона (192.168.3.0/24). В зоне запускаем пинг до данного хоста, а сами заходим на него и под суперпользователем запускаем
snoop:
frankenstein:~# snoop -d qfe0 -v from 192.168.3.202
Using device qfe0 (promiscuous mode)
ETHER: ----- Ether Header -----
ETHER:
ETHER: Packet 1 arrived at 12:16:33.29232
ETHER: Packet size = 98 bytes
ETHER: Destination = 8:0:20:bc:6c:ec, Sun
ETHER: Source = 8:0:20:8f:a1:28, Sun
ETHER: Ethertype = 0800 (IP)
---- SNIP ----
То, что нужно - мы получили MAC-адрес интерфейса зоны (8:0:20:8f:a1:28), а стало быть и MAC-адрес сетевой карточки глобальной зоны. Теперь в зоне запускаем пинг на бродкаст:
А на нашем хосте снупим полученный MAC-адрес (добавив в начало "0"):
frankenstein:~# snoop -d qfe0 from 08:0:20:8f:a1:28
Using device qfe0 (promiscuous mode)
---- SNIP ----
192.168.3.230 -> frankenstein3 ICMP Echo reply (ID: 1384 Sequence number: 0)
192.168.3.202 -> frankenstein3 ICMP Echo reply (ID: 1384 Sequence number: 1)
----- SNIP -----
Готово, IP-адрес глобальной зоны - 192.168.3.230.
Конечно же, администратор может прикрыть данный метод, например, запретив ответы на ping в глобальной зоне и т.д.
Теперь попробуем второй вариант - сначала вычислим
hostname глобальной зоны с помощью
kstat - пока еще эту лазейку не прикрыли. Запускаем внутри зоны:
# kstat | less
.....
--- SNIP ---
module: iscsi instance: 0
name: iscsi_hba_1 class: iscsi_hba
_alias enterprise.themagicbus
_cntr_sess 0
_name
crtime 147.468882603
snaptime 219875.678668575
--- SNIP ----
Вот оно - значение
iscsi alias - это и есть
hostname глобальной зоны, теперь с помощью
nslookup или
dig можно получить и IP-адрес глобальной зоны.