Cisco 891FJ を買った時の初期設定メモ
以下が前提条件です
- 買ったのは Cisco 891F (C891FJ-K9)
- IPv6系
- NTT東日本のNGNにつながっている
- ひかり電話なしでPrefixはRAで降ってくる。ブリッジはせず、LAN側はIPv6使用不可
- ACLはWAN側INに静的にかける。Reflexive ACLは使わない(発信元がルータ自身だと動かないっぽい)
- ACLの宛先はanyにする。WAN側アドレスにすべきだが、変わる可能性があり面倒だった
- DDNSはOPEN IPv6 ダイナミック DNS for フレッツ・光ネクストを使う
- IPv4系
- 普通にPPPoEでつなぐ
- Transixでもつなぐ
- デフォルトゲートウェイはTransixで、トンネルが切れた時はPPPoE
- ACLはWAN側INに静的にかけてOUTにReflexive ACLを使う
- プライベートIPアドレスは192.168.0.0/16を/24に切り分けながら使う
- DHCP有効
- WAN側ポートはFastEthernet0
- 自宅がVDSLのため。普通はGigabitEthernet8を使うはず
- 実際の通信はFastEthernet0をブリッジしてBVI1から行う
- IPv6でサーバ立てるため、FE0と特定VLANをブリッジしておきたかった
IOSバックアップと初期化
- まずはバックアップ。USBメモリが刺さるのでそこに取る
- 多分FAT32でフォーマットしておけば認識される
# 特権
enable
# 中身確認しつつIOSバックアップ
dir flash:
dir usbflash:
copy flash:c800j-<IOSバージョンとか諸々>.bin usbflash0:
- 色々初期化
# config削除
erase startup-config
# flashの中身を見ながらIOSの.bin以外を消していく
dir flash:
delete /force /recursive flash:managed # 一例
# 再起動
reload
Cisco共通設定
# 特権
enable
configure terminal
# ホスト名
hostname 891fj
# ログのコンソール出力を切る
no logging console
# enableパスワード設定
enable secret <Password>
# 日本時間にする
clock timezone JST 9
# ログの時刻を日本時間にして可能な限り詳細に出す
service timestamps debug datetime msec localtime show-timezone year
service timestamps log datetime msec localtime show-timezone year
LAN側設定
# 適当にVLAN作る
vlan 10
name ClientSeg
exit
# 適当にIPアドレス割り当てる
interface Vlan 10
ip address 192.168.10.1 255.255.255.0
exit
# 適当に物理インターフェースにVLANつける
interface GigabitEthernet 0
switchport access vlan 10
switchport mode access
exit
# デフォルトで作られているVLAN1はshutdownしておく
interface Vlan 1
shutdown
exit
# DHCP作る
ip dhcp pool ClientDhcpPool
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
dns-server 8.8.8.8 8.8.4.4
exit
# DHCPの固定割り当てを行う場合は別でプール作る
ip dhcp pool StaticAssign1
host 192.168.10.200 255.255.255.0
client-identifier <Macアドレスの先頭に01をつけて4桁ごとに.をいれたもの>
exit
- client-identifierが分からない場合は以下の通り
- LANケーブルを一度繋いでみて
show ip dhcp binding
するとClient-IDが表示される - ケーブルを抜いてから
clear ip dhcp binding <割り当てられたIPアドレス>
- LANケーブルを一度繋いでみて
WAN側ブリッジ
- この時点ではWAN側ケーブルをつながない
# IRBブリッジ(ブリッジしつつBVIインターフェース使えるやつ)有効化
bridge irb
# ブリッジグループ1番でスパニングツリー有効化
bridge 1 protocol ieee
# ブリッジグループ1番でIPルーティング有効化(これがないとBVIがIPトラフィック受け取れない)
bridge 1 route ip
# FE0をブリッジグループ1番に加える
interface FastEthernet 0
bridge-group 1
exit
# VLAN90のインターフェースをブリッジグループ1番に加える
vlan 90
name WanSeg
exit
interface Vlan 90
bridge-group 1
exit
NGN IPv6系
# IPv6 ルーティング
ipv6 unicast-routing
# IPv6 CiscoExpressForwarding
ipv6 cef
# WAN INにかけるACL(nd-nsとnd-naは暗黙的に許可されている)
ipv6 access-list v6WanIn
permit icmp any any router-advertisement # Router Solicitationの応答
permit icmp any any echo-reply # pingの戻り(疎通確認用)
permit icmp any any destination-unreachable # 宛先不明
permit icmp any any packet-too-big # 指定されたMTUを超えるパケットだった(path-mtu-discoveryで使うっぽい)
exit
# WAN INのIPv4拒否(たぶん必要ない)
ip access-list standard v4DenyAll
deny any
exit
# WANポートの設定
interface BVI 1
# ACL適用
ipv6 traffic-filter v6WanIn in
ip access-group v4DenyAll in
# Router Solicitationに応答しない
ipv6 nd ra suppress all
# Router Advertisementで降ってきたprefixとデフォルトゲートウェイを使う
ipv6 address autoconfig default
exit
DDNS設定
- 基本は公式サンプルの通りに書く
- 対向先がOCI想定で固定IPアドレスなので、891fj側ではDNSを指定していない
- そのためpingの宛先はドメインではなくIPv6アドレスを指定する
- IOS標準で
ip ddns update
という機能もあるが、これはIPv4専用らしく使えなかった
event manager applet OPEN_DDNS_RENEW_SCRIPT
# 1分刻みに実行。1時間刻みの場合は"0 * * * *"のはず
event timer cron name OPEN_DDNS_RENEW_SCRIPT_1 cron-entry "* * * * *"
# enableしてからpingを投げる。enableが必要な理由は分からないが、無いと動かなかった
action 1.0 cli command "enable"
action 1.0 cli command "ping <更新専用アドレス(IPv6アドレス)>"
exit
NTP設定
- NTPサーバはINTERNET MULTIFEEDのものを使う
# ACLで123/udpを開ける
ipv6 access-list v6WanIn
permit udp host 2001:3a0:0:2001::27:123 eq ntp any
permit udp host 2001:3a0:0:2005::57:123 eq ntp any
permit udp host 2001:3a0:0:2006::87:123 eq ntp any
exit
# NTPを指定する
ntp server 2001:3a0:0:2001::27:123
ntp server 2001:3a0:0:2005::57:123
ntp server 2001:3a0:0:2006::87:123
- 疎通確認
ping 2001:3a0:0:2001::27:123
show ntp associations
IPv4 PPPoE系
# PPPoE outのACL(anyで通してReflexive ACLのタグつける)
ip access-list extended v4WanOut
permit ip any any reflect IPREFLECT
exit
# PPPoE inのACL(Reflexive ACLの関連だけ許可)
ip access-list extended v4WanIn
evaluate IPREFLECT
exit
# PPPoEのinterface作る
interface Dialer 1
# ACL適用
ip access-group v4WanIn in
ip access-group v4WanOut out
# IPアドレスは自動設定
ip address negotiated
# フレッツのいつものMTU
ip mtu 1454
# PPPを使う
encapsulation ppp
# 物理interfaceに紐づけるときに使うプール番号
dialer pool 1
# PPPoEで許可するプロトコルを決める時に使う番号
dialer-group 1
# PPPoEの認証はクライアント側からの一方向のみ
ppp authentication chap callin
# PPPoEの認証情報
ppp chap hostname <ID>
ppp chap password <Password>
exit
# WANポートにPPPoEを紐づける
interface BVI 1
# PPPoEを有効化
pppoe enable
# dialer pool 1を接続に使う
pppoe-client dial-pool-number 1
exit
# dialer-group 1でIPv4を有効化する
dialer-list 1 protocol ip permit
- ルーティング
# IPv4のデフォルトゲートウェイをPPPoEにする(基本はTransixに向けたいのでメトリックのコストを上げておく)
ip route 0.0.0.0 0.0.0.0 Dialer 1 100
- NAPT(Cisco的にはPAT)の作成
# NAPTする内側アドレスの範囲を定義して有効化する
access-list 10 permit 192.168.0.0 0.0.255.255
ip nat inside source list 10 interface Dialer 1 overload
# NAPT外側interfaceの設定
interface Dialer 1
ip nat outside
exit
# NAPT内側interfaceの設定
interface Vlan 10
ip nat inside
exit
- このあたりでping疎通確認してみる
- 891FJから投げるとReflexive ACLが動かないので適当なクライアントPCから投げる
Transix系
# NGN系で作ったACLでip-ipプロトコル(4番)を許可する
ipv6 access-list v6WanIn
permit 4 2404:8E00::FEED:100/127 any
exit
# ip-ipトンネルを作る
interface Tunnel 1
# IPアドレスはRFC6333で192.0.0.2が予約されているらしい
ip address 192.0.0.2 255.255.255.252
# PPPoEで作ったACLを使い回す
ip access-group v4WanIn in
ip access-group v4WanOut out
# 物理interfaceはBVI1を使う
tunnel source BVI1
# IPv4 over IPv6トンネルを指定
tunnel mode ipv6
# トンネルの対向先
tunnel destination 2404:8E00::FEED:100
# 最適なMTU値を探索する(入力してもshow runに出ないのでデフォルトっぽい)
tunnel path-mtu-discovery
exit
# IPv4のデフォルトゲートウェイをTransixにする
ip route 0.0.0.0 0.0.0.0 Tunnel 1
SSH
- ACLが正しくかかっていて外からつつけない事を確認しておく
# 適当にドメイン名をつける(つけないと鍵生成できない)
ip domain-name myhome.test
# rsa鍵を2048bitで作る
crypto key generate rsa modulus 2048
# SSH version2を使う
ip ssh version 2
# デフォルトでvty 0 4が定義されていたのでそれを上書きしていく
line vty 0 4
# local認証を有効化する(これが無いと公開鍵認証が通らなかった)
login local
# vtyをsshで使う
transport input ssh
# 無操作で切断されるまでの時間を120分にする
exec-timeout 120 0
exit
# 公開鍵登録
ip ssh pubkey-chain
username <ID>
key-string
<公開鍵を適当に分割しながら貼り付ける>
exit
exit
exit
コンソール接続
- 必ずSSH接続できるようになってから行う
- コンソール接続すら出来なくなるとconfig初期化になる
# 適当にユーザーを作る
username <ID> secret <Password>
# コンソール接続でローカル認証かける
line console 0
login local
exit
その他
- radikoはPPPoE経由に向ける
- Transixだと聴取エリアがコロコロ変わってしまう
ip route 203.211.199.120 255.255.255.255 Dialer 1
- 最後に忘れず保存する
copy running-config startup-config
入れようとして結局やめたconfigメモ
- DHCPv6でDNS設定もらう
- 結局DNS設定無しで全部IPアドレス直打ちした
# ACLでDHCPv6とDNSを開ける
ipv6 access-list v6WanIn
permit udp any any eq 546 # DHCPv6
permit udp any eq domain any # DNS(うっかり外向けにDNS公開すると死ぬ気がする)
interface FastEthernet 0
# DNSの設定をDHCPv6からもらう
ipv6 nd other-config-flag