Для разъяснения устройство Cisco могло иметь имя пользователя для доступа telnet, если это настроено, чтобы сделать так.
Juniper и Cisco варьируются значительно здесь. Когда Вы telnet к устройству Cisco и Вам предлагают пароль (просто пароль), Вы на самом деле только поражаете пароль VTY, не фактическую учетную запись аутентификации на поле. Когда Вы telnet/ssh к устройству Juniper Вам предложат пройти проверку подлинности против учетных записей, определенных на поле. В основном Вам всегда будет нужна комбинация пользователя/передачи на устройстве Juniper.
Juniper и Cisco также варьируются значительно с их "режимами". На устройстве Cisco, когда Вы входите, "включают режим", Вы на самом деле просто наращиваете свои полномочия. На Juniper полномочия устройства определяются на пользователя (или пользовательский класс). Когда Вы входите в устройство Juniper как пользователь, пользователь или имеет права выполнить команду или не делает. Нет никакой потребности войти в специальный режим.
Как @SpacemanSpiff указанный, Вы не можете telnet в корневую учетную запись в Juniper. Также telnet по умолчанию не включен на устройстве. Изучение SSH или SCP было бы предпочтительным методом скопировать конфигурации.
Наконец-то решил. Вот как. Извините за этот очень длинный пост, но я потратил на это много времени и думаю, что некоторые люди могут быть заинтересованы в подробном решении.
+---------------------------------------------------------------------------------------------+
|HOST |
| |
| +-------------------------------------------------+ |
| | UBUNTU-VM | |
| | | |
| | +-------------------+ | |
| | |UBUNTU-LXC | | +------------------+ |
| | | 10.0.0.3/24 | 10.0.0.1/24 | |OTHER VM | |
| | | eth0-----lxcbr0----------eth0-----------br0----------eth0 | |
| | | | 192.168.100.2/24| 192.168.100.1/24 |192.168.100.3/24 | |
| | +-------------------+ | +------------------+ |
| +-------------------------------------------------+ |
+---------------------------------------------------------------------------------------------+
Причина, по которой мои пакеты выходят из UBUNTU-VM с 192.168.100.2
, связана с правилом по умолчанию iptables
, которое создается при запуске моего container:
root@UBUNTU-VM# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.0.3.0/24 !10.0.3.0/24
Это правило в основном говорит: «Если пакет из подсети 10.0.3.0/24
, а пункт назначения находится в другой подсети, измените IP-адрес источника». Поэтому, если я удалю это правило, я смогу пинговать извне, используя IP-адрес моего контейнера. Давайте удалим это правило:
root@UBUNTU-VM# iptables -D POSTROUTING 1 -t nat
Теперь, если я пингую 192.168.100.1
из моего контейнера LXC ( 10.0.3.233
), произойдет следующее:
Однако br0
, похоже, не может ответить.
root@HOST# ip route add 10.0.0.0/8 via 192.168.100.2
Теперь шлюз по умолчанию для подсети 10.0.0.0/8
- eth0
на UBUNTU-VM. Попробуем пинг:
root@HOST# tcpdump -i br0 -n
14:14:33.885982 IP 10.0.3.233 > 192.168.100.1: ICMP echo request, id 660, seq 14, length 64
14:14:34.884054 ARP, Request who-has 10.0.3.233 tell 192.168.100.1, length 28
По-прежнему не работает. К сожалению, у меня нет объяснения этому. И что еще хуже, почему br0
делает ARP-запрос для IP-адреса, даже не входящего в его подсеть? По крайней мере, я ожидал, что запрос ICMP будет незаметно проигнорирован, но отвечать запросом ARP просто странно.
br0
- это мост, который я настроил на хосте вручную с помощью netctl
. В моем шаблоне UBUNTU-VM у меня есть следующее:
<interface type='bridge'>
<mac address='52:54:00:cb:aa:74'/>
<source bridge='br0'/>
<model type='e1000'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</interface>
Когда создается UBUNTU-VM, kvm
(или libvirt
?) Создает пару veth и присоединяет их к мосту.
root@HOST# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.fe0000000001 no vnet1
vnet2
По какой-то причине это не работает (изменения / комментарии приветствуются)
Решением было настроить маршрутизируемую сеть
вместо простой мостовой сети
.
Создайте XML-шаблон для своей сети:
<network>
<name>vms</name>
<uuid>f3e18be1-41fe-4f34-87b4-f279f4a02254</uuid>
<forward mode='route'/>
<bridge name='br0' stp='on' delay='0'/>
<mac address='52:54:00:86:f3:04'/>
<ip address='192.168.100.1' netmask='255.255.255.0'>
</ip>
<route address='10.0.0.0' prefix='8' gateway='192.168.100.2'/>
</network>
Обратите внимание на раздел маршрута по умолчанию. Затем загрузите его и запустите
virsh # define vms.xml
virsh # net-start vms
Интерфейс должен выглядеть следующим образом:
<interface type='network'>
<mac address='52:54:00:cb:aa:74'/>
<source network='vms'/>
<model type='e1000'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</interface>
После перезапуска виртуальной машины и контейнера я наконец могу выполнить эхо-запрос br0
, используя IP-адрес контейнера LXC:
root@HOST# tcpdump -i br0 -n
14:24:00.349856 IP 10.0.3.233 > 192.168.100.1: ICMP echo request, id 468, seq 16, length 64
14:24:00.349900 IP 192.168.100.1 > 10.0.3.233: ICMP echo reply, id 468, seq 16, length 64
2.
? ip route add
) очень похожа на то, что делает libvirt: мост с двумя подключенными к нему интерфейсами vnet , и маршрут по умолчанию ... Может, libvirt творит здесь какую-то черную магию? Измените описание сети для сети libvirt, чтобы она не выполнялась.
С хоста виртуальной машины запустите virsh net-list
.
Затем virsh net-edit
сеть, в которой находится виртуальная машина, чтобы удалить наттинг.