Cisco IOSのtelnetコマンドを用いてvtyに接続する方法についてまとめます。このコンテンツはもともとCCIE試験対策として作られたため、実践では滅多に使わないような重箱の隅をつつくような設定も含まれている事をご了承ください。
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# enable password <password> Router(config)# enable secret <password> Router(config)# line vty <num_range> Router(config-line)# password <password> Router(config-line)# login Router(config-line)# session-timeout <min> Router(config-line)# exec-timeout <min> [ <sec> ] Router(config-line)# absolute-timeout <min> Router(config-line)# logout-warning <sec> Router(config)# ip telnet quiet Router(config)# ip telnet hidden { address | hostname } Router(config)# busy-message <hostname> <message> Router(config)# service telnet-zeroidle
構成図
これ以降の動作確認は、以下の環境で行います。
+--------+ +--------+ | R1 +--------+ R2 | +--------+.1 .2+--------+ e0/0 e0/1 192.168.12.0/24 R1 Loopback0 R2 Loopback0 10.1.1.1/32 10.2.2.2/32
[R1] router ospf 1 network 0.0.0.0 255.255.255.255 area 0 [R2] router ospf 1 network 0.0.0.0 255.255.255.255 area 0
設定全文は下記ファイルです。詳細設定は下記を参照ください。
telnet server
仕様説明
telnetやsshでのアクセス許可を設定するには、line vtyに対しての設定を施します。vtyとはVirtual Typewriterの略で、日本語では”仮想端末”などと訳される事が多いです。
telnetを許可するには、以下のコマンドを入力します。
コマンド | 説明 |
---|---|
password <password> | line vtyに対してパスワードを定義します。 |
login | 上記パスワードに基づく認証を行います。 |
Router(config)# line vty <num_range> Router(config-line)# password <password> Router(config-line)# login
vty接続したユーザは、enable passwordが定義されていない状態でuser modeからenable modeに昇格する事ができません。telnetなどのリモート操作を許可する場合は、以下のコマンドを使用してenable passwordを定義する必要があります。
Router(config)# enable password <password> Router(config)# enable secret <password>
telnet 接続
telnetアクセスを許可する設定をR1に投入します。
[R1] line vty 0 4 password cisco login
R2からR1へのtelnet接続が可能である事を確認します。また、enable passwordが未設定の状態ではenable modeに昇格できない事を確認します。
[R2] R2#telnet 192.168.12.1 Trying 192.168.12.1 ... Open User Access Verification Password: R1>enable % No password set R1>
enable password
R1にenable passwordを定義します。
[R1] enable secret cisco
R2からR1へのtelnet接続が可能である事を確認します。また、enable modeへの昇格が可能である事を確認します。
R2#telnet 192.168.12.1 Trying 192.168.12.1 ... Open User Access Verification Password: R1>enable Password: R1#
telnet client
仕様説明
以下のコマンドでtelnet clientの設定が可能です。
コマンド | 説明 |
---|---|
session-timeout | vty接続したユーザが他のルータに接続した際、他のルータへの接続可能な時間の上限を定義します。 |
exec-timeout | 何も入力しない状態が続いた場合の接続可能時間の上限を定義します。 |
absolute-timeout | 入力が続続いた場合の接続可能時間の上限を定義します。 |
absolute-timeout | absolute-timeoutによりログアウトされる前に警告メッセージを表示します。警告メッセージを表示することで、ログアウト前にwrite memoryを実行したりコマンド入力途中でのログアウトを防いだりする事が可能です。 |
ip telnet quiet | telnet接続時の一切のメッセージを抑制します。 |
ip telnet hidden | telnet接続時に、IPアドレスかホスト名の出力を抑制します。 |
busy-message | telnet接続に失敗した時のメッセージを定義します。 |
Router(config-line)# session-timeout <min> Router(config-line)# exec-timeout <min> [ <sec> ] Router(config-line)# absolute-timeout <min> Router(config-line)# logout-warning <sec> Router(config-line)# ip telnet quiet Router(config-line)# ip telnet hidden { address | hostname } Router(config-line)# busy-message <hostname> <message>
接続設定
R2に対してtelnet接続の設定を投入します。送信元interfaceをLoopback 0に変更し、ip precedence 3 (tos 72)の優先度を定義します。
また、動作確認のために以下のようなACLをR1に適用します。
[R2] ip telnet source-interface Loopback 0 ip telnet tos 72 [R1] ip access-list extended COUNT_PREC 10 permit ip any any precedence 0 20 permit ip any any precedence 1 30 permit ip any any precedence 2 40 permit ip any any precedence 3 50 permit ip any any precedence 4 60 permit ip any any precedence 5 70 permit ip any any precedence 6 80 permit ip any any precedence 7 ! interface Ethernet0/0 ip access-group COUNT_PREC in
R2からR1へtelnet接続します。
[R2] R2#telnet 10.1.1.1 Trying 10.1.1.1 ... Open User Access Verification Password: R1>
送信元がR2 Loopback 0 (10.2.2.2)になっている事とip precedence 3 (flash)で送信されている事が分かります。
[R1] R1#show tcp brief TCB Local Address Foreign Address (state) 64A64964 10.1.1.1.23 10.2.2.2.25425 ESTAB R1# R1# R1#show access-lists Extended IP access list COUNT_PREC 10 permit ip any any precedence routine 20 permit ip any any precedence priority 30 permit ip any any precedence immediate 40 permit ip any any precedence flash (45 matches) 50 permit ip any any precedence flash-override 60 permit ip any any precedence critical 70 permit ip any any precedence internet (4 matches) 80 permit ip any any precedence network R1#
表示設定
R2にtelnet接続に関する表示を一切禁止する設定を投入します。
さらに動作確認のため、R1 Loopback0をshutdownし、R2に名前解決の設定を投入します。
[R2] ip telnet quiet ! ip host R1Lo0 10.1.1.1 ip host R1e0 192.168.12.1 [R1] interface Loopback0 shutdown
R2からR1に接続する際に一切の出力がなくなっている事が分かります。接続に失敗した旨のメッセージや接続先のホスト名, IPアドレスが表示されなくなった事が分かります。
左側に初期設定の出力を、右側に”ip telnet quiet”を入力した場合の出力を示します。
[初期設定] [ip telnet quiet] R2#telnet R1Lo0 R2#telnet R1Lo0 Trying R1Lo0 (10.1.1.1)... | % Destination unreachable; gateway or host down | R2# R2# R2# R2# R2#telnet R1e0 R2#telnet R1e0 Trying R1e0 (192.168.12.1)... Open | User Access Verification User Access Verification Password: Password: R1> R1>
telnet接続時、IPアドレスの表示を禁止する設定を投入します。
[R2] no ip telnet quiet ip telnet hidden address
R2からR1に接続する際にIPアドレスが表示されなくなった事が分かります。
左側に初期設定の出力を、右側に”hidden ip address”を入力した場合の出力を示します。
[初期設定] [hidden ip address] R2#telnet R1Lo0 R2#telnet R1Lo0 Trying R1Lo0 (10.1.1.1)... | Trying R1Lo0 address #1 ... % Destination unreachable; gateway or host down % Destination unreachable; gateway or host down R2# R2# R2# R2# R2#telnet R1e0 R2#telnet R1e0 Trying R1e0 (192.168.12.1)... Open | Trying R1e0 address #1 ... Open User Access Verification User Access Verification Password: Password: R1> R1>
telnet接続時、IPアドレスの表示を禁止する設定を投入します。
[R2] busy-message R1Lo0 # sorry, your connection failed # no ip telnet hidden address
R2からR1への接続失敗時に、エラーメッセージが変わった事が分かります。
左側に初期設定の出力を、右側に”busy-message”を入力した場合の出力を示します。
[初期設定] [busy-message] R2#telnet R1Lo0 R2#telnet R1Lo0 Trying R1Lo0 (10.1.1.1)... | sorry, your connection failed % Destination unreachable; gateway or host down | R2# R2#
service telnet-zeroidle
仕様説明
service telnet-zeroidleは接続中断時のメッセージが抑制されないようにする機能です。”Shift + Ctrl + 6″の後に”x”を押下による接続中断を行うと、接続先へのtcp window sizeを0にします。0にする事によって接続先からのメッセージが流れてこなくなり、telnet接続中断による重要なメッセージ(link down event, ospf eventなど)の見落としを防ぐ事ができます。
service telnet-zeroidleを有効にするには以下のコマンドを使用します。
Router(config)# service telnet-zeroidle
初期設定時の挙動
service telnet-zeroidleを理解するために、まずはservice telnet-zeroidleが無効である(初期設定)状態の動作を確認します。検証の都合上、先程投入した設定の一部を削除します。
[R2] no ip telnet source-interface Loopback 0
telnet接続中断時にメッセージが抑制させてしまう事を確認するために、以下の操作を実施します。手順がやや複雑なので、まずは概要を示します。
コンソール | 操作 |
---|---|
R2 | R2からR1へtelnet接続します。 |
R2 | “terminal monitor”コマンドでコンソールに出力されるメッセージが見えるようにします。 |
R2 | “Shift + Ctrl + 6″の後に”x”を押下し、接続を中断させます。 |
R1 | Loopback 0でshut/no shutを繰り返し、ログメッセージを数件発生させます。 |
R2 | Enterを押下し接続を再開します。上記ログメッセージが表示されるかを確認します。 |
R2からR1へ接続し、ログメッセージが見えるようにします。
[R2] R2#telnet 192.168.12.1 Trying 192.168.12.1 ... Open User Access Verification Password: R1> R1>enable Password: R1# R1#terminal monitor
R2に接続された端末で”Shift + Ctrl + 6″の後に”x”を押下し、telnet接続を中断します。
[R2] R1# # press Sift + Ctrl + 6 then x R1# R2#show sessions Conn Host Address Byte Idle Conn Name * 1 192.168.12.1 192.168.12.1 0 0 192.168.12.1 R2#
R1でLooopback0のshut/no shutを2セット行います。
[R1] R1(config)#interface Loopback 0 R1(config-if)#shutdown R1(config-if)# *Mar 1 00:08:27.259: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:08:28.259: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:08:38.207: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:08:39.207: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up R1(config-if)#shutdown R1(config-if)# *Mar 1 00:08:50.087: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:08:51.087: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:08:59.311: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:09:00.311: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up R1(config-if)#
R1でLooopback0のshut/no shutを2セット行います。
R1(config)#interface Loopback 0 R1(config-if)#shutdown R1(config-if)# *Mar 1 00:08:27.259: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:08:28.259: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:08:38.207: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:08:39.207: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up R1(config-if)#shutdown R1(config-if)# *Mar 1 00:08:50.087: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:08:51.087: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:08:59.311: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:09:00.311: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up R1(config-if)#
R2に接続された端末でEnterを押下し、telnet接続を再開させます。ログメッセージが8件中4件しか表示されない事が分かります。service telnet-zeroidleが無効である状態では一部のメッセージが失われてしまっている事が分かります。
[R2] R2# [Resuming connection 1 to 192.168.12.1 ... ] *Mar 1 00:08:27.259: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:08:28.259: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down *Mar 1 00:08:38.207: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:08:39.207: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up R1#
service telnet-zeroidle
R2でservice telnet-zeroidleを有効化します。
[R2] service telnet-zeroidle
先程と同様の手順でR2からR1へtelnet接続した後に、接続を中断します。
[R2] R2#telnet 192.168.12.1 Trying 192.168.12.1 ... Open User Access Verification Password: R1>enable Password: R1# R1#terminal monitor R1# R1# R2#show sessions Conn Host Address Byte Idle Conn Name * 1 192.168.12.1 192.168.12.1 0 0 192.168.12.1 R2#
R1でLooopback0のshut/no shutを2セット行います。
[R1] R1(config)#interface Loopback 0 R1(config-if)#shutdown R1(config-if)# *Mar 1 00:40:50.963: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:40:51.963: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:41:02.159: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:41:03.159: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up R1(config-if)#shutdown R1(config-if)# *Mar 1 00:41:08.919: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:41:09.919: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:41:14.659: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:41:15.659: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up R1(config-if)#
Enterを押下しtelnet接続を再開させます。ログメッセージが8件中8件全て表示されている事が分かります。service telnet-zeroidleが有効にする事によって、全てのメッセージが表示されるようになる事が分かります。
[R2] R2# [Resuming connection 1 to 192.168.12.1 ... ] *Mar 1 00:40:50.963: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:40:51.963: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down *Mar 1 00:41:02.159: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:41:03.159: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up *Mar 1 00:41:08.919: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down *Mar 1 00:41:09.919: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down *Mar 1 00:41:14.659: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 00:41:15.659: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up R1#