もやし日誌

日記のようなもの

Cisco C841M-4X-JSECを買ってみた話とハマった点

Cisco StartシリーズのC841M-4X-JSECが1万円ちょっとで衝動買いしてしまったので自宅のネットワーク機器のリプレースをしました。
Ciscoのネットワーク機器を触るのは初めてで、コンフィグ等いろいろ慣れない点があり思いっきりハマってしまい1日無駄にした点もあったのでメモとして残しておきます。

設定項目

ハマったポイント

ipv6 cefが有効になっているとipv6の外向きの通信がなぜか50%ぐらいパケットロスする

supportforums.cisco.com どうやらIOS側のipv6 CEFのバグ疑惑があるので、no ipv6 cefで回避。ちなみにipv4のCEFに関しては問題ありませんでした。

ipv6環境にてWindows Updateが走らなくなる

Windows Updateのログを確認するとアップデートを配信しているCDNに繋げなくてエラーになっている模様。
(正確には接続は確立できるが、それ以降の通信がまったくできない状態になる)
確認するとPMTUD Black Holeにより通信できなくなっていたようなので、ルーター側でTCP MSS Clampingをすることにより解決しました。
本来ならICMPv6パケット(Packet too bigメッセージ)が送出され、MSS値が調整されるはずですが、このパケットがフィルタされてしまい届かないことによりこのような現象が起こることがあるようです。
TCPの場合、3way handshakeの段階で自分が受け取れる最大のセグメントサイズを通知することが出来るので、Dialerインタフェース側に通知する設定を加えることで解決しました。

interface Dialer2
 ipv6 mtu 1454
 ipv6 tcp adjust-mss 1394

ルーターがWAN側からのping要求に対して応答しないようにZone Based Firewallを調整したはずなのに応答してしまう

下記のコンフィグのように、外→内のルールでping要求をdropするようにしていますが、何故かルーターpingの要求に対して応答してしまうようになっていました。

ip access-list extended v4acldeny
 permit icmp any any echo
!
ipv6 access-list v6acldeny
 permit icmp any any echo-request
!
class-map type inspect match-any pub-priv-deny-cmap
 match access-group name v4acldeny
 match access-group name v6acldeny
!
policy-map type inspect pub-priv-policy
 class type inspect pub-priv-deny-cmap
  drop
 class type inspect pub-priv-cmap
  inspect 
 class class-default
  drop
!
zone-pair security pub-priv source public destination private
 service-policy type inspect pub-priv-policy
!

ルーター本体はselfに属するので、以下のコンフィグを追加することで解決。

zone-pair security pub-pub source public destination self
 service-policy type inspect pub-priv-policy

native vlanに指定したVLANがスイッチ側でタグを付けると使えない(疎通しない)

(当たり前なのかもしれませんが) untaggedに指定したVLANはタグ付きで使用することはできないようです。
(いくらスイッチ側でタグを付けようがルーター側で破棄されるようです)

デフォルト設定ではVLAN1がuntaggedに設定されるので、VLAN1を使わないようにして対処しました。

コンフィグ

hostname akane
!
!
logging buffered 51200 warnings
!
!
ip dhcp excluded-address 192.168.0.1
ip dhcp excluded-address 192.168.3.1
!
ip dhcp pool vlan2-dhcp
 network 192.168.0.0 255.255.255.0
 default-router 192.168.0.1 
 dns-server 8.8.8.8 8.8.4.4 
!
ip dhcp pool vlan3-dhcp
 network 192.168.3.0 255.255.255.0
 default-router 192.168.3.1 
 dns-server 8.8.8.8 8.8.4.4 
!
!
!
no ip domain lookup
ip domain name akane.local
ip cef
ipv6 source-route
ipv6 flowset
ipv6 unicast-routing
no ipv6 cef
ipv6 dhcp pool vlan2-dhcpv6
 dns-server 2001:4860:4860::8888
 dns-server 2001:4860:4860::8844
!
!
!
flow record nbar-appmon
 match ipv4 source address
 match ipv4 destination address
 match application name
 match interface output
 match ipv6 source address
 match ipv6 destination address
 match interface input
 collect counter bytes
 collect counter packets
 collect timestamp absolute first
 collect timestamp absolute last
 collect application http host
!
!
flow monitor application-mon
 cache timeout active 60
 record nbar-appmon
!
!
!
!
vtp mode transparent
username matsuri privilege 15 secret 5 hogepassword
!
redundancy
!
!
!
!
!
vlan 2-3 
no cdp run
!
!
class-map type inspect match-any pub-priv-deny-cmap
 match access-group name v4acldeny
 match access-group name v6acldeny
class-map type inspect match-any priv-pub-cmap
 match protocol tcp
 match protocol udp
 match protocol ident
 match protocol icmp
class-map type inspect match-any pub-priv-cmap
 match access-group name v4alist
 match access-group name v6alist
!
policy-map type inspect priv-pub-policy
 class type inspect priv-pub-cmap
  inspect 
 class class-default
  drop
policy-map type inspect pub-priv-policy
 class type inspect pub-priv-deny-cmap
  drop
 class type inspect pub-priv-cmap
  inspect 
 class class-default
  drop
!
zone security public
zone security private
zone-pair security priv-pub source private destination public
 service-policy type inspect priv-pub-policy
zone-pair security pub-priv source public destination private
 service-policy type inspect pub-priv-policy
zone-pair security pub-pub source public destination self
 service-policy type inspect pub-priv-policy
! 
!
!
!
!
bridge crb
!
!
!
!
interface GigabitEthernet0/0
 switchport mode trunk
 no ip address
!
interface GigabitEthernet0/1
 switchport trunk native vlan 2
 switchport mode trunk
 no ip address
!
interface GigabitEthernet0/2
 switchport trunk native vlan 2
 switchport mode trunk
 no ip address
!
interface GigabitEthernet0/3
 switchport trunk native vlan 2
 switchport mode trunk
 no ip address
!
interface GigabitEthernet0/4
 no ip address
 duplex auto
 speed auto
 bridge-group 1
 bridge-group 1 input-type-list 200
!
interface GigabitEthernet0/5
 no ip address
 duplex auto
 speed auto
 ipv6 dhcp client pd ngnprefix
 pppoe enable group global
 pppoe-client dial-pool-number 2
 pppoe-client dial-pool-number 1
 bridge-group 1
!
interface Vlan1
 no ip address
!
interface Vlan2
 ip address 192.168.0.1 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
 zone-member security private
 no autostate
 ipv6 address ocnprefix ::1:1/64
 ipv6 enable
 ipv6 nd other-config-flag
 ipv6 nd ra interval 10
 ipv6 dhcp server vlan2-dhcpv6
 ipv6 virtual-reassembly in
!
interface Vlan3
 ip address 192.168.3.1 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
 zone-member security private
 no autostate
!
interface Dialer1
 mtu 1454
 ip address negotiated
 ip flow monitor application-mon input
 ip flow monitor application-mon output
 ip nat outside
 ip virtual-reassembly in
 zone-member security public
 encapsulation ppp
 ip tcp adjust-mss 1414
 dialer pool 1
 dialer idle-timeout 0
 dialer-group 1
 ppp authentication chap callin
 ppp chap hostname hogehoge@hoge.ne.jp
 ppp chap password 0 hogehogepassword
 ppp ipcp dns request accept
 no cdp enable
!
interface Dialer2
 mtu 1454
 no ip address
 ip flow monitor application-mon input
 ip flow monitor application-mon output
 zone-member security public
 encapsulation ppp
 ip tcp adjust-mss 1414
 dialer pool 2
 dialer idle-timeout 0
 dialer-group 2
 ipv6 address autoconfig
 ipv6 enable
 ipv6 mtu 1454
 no ipv6 nd ra suppress
 ipv6 tcp adjust-mss 1394
 ipv6 dhcp client pd hint ::/0
 ipv6 dhcp client pd ocnprefix
 ipv6 virtual-reassembly in
 ppp authentication chap callin
 ppp chap hostname hogehoge@ipv6.hoge.ne.jp
 ppp chap password 0 hogehogepassword
 ppp ipcp dns request accept
 no cdp enable
!
ip forward-protocol nd
ip http server
ip http upload enable path flash:
ip http upload overwrite
ip http access-class 1
ip http authentication local
ip http secure-server
ip http timeout-policy idle 60 life 86400 requests 10000
!
!
ip nat inside source list 1 interface Dialer1 overload
ip nat inside source static tcp 192.168.0.110 443 interface Dialer1 443
ip nat inside source list 2 interface Dialer1 overload
ip route 0.0.0.0 0.0.0.0 Dialer1 permanent
ip ssh version 2
!
ip access-list extended v4acldeny
 permit icmp any any echo
ip access-list extended v4alist
 permit tcp any host 192.168.0.110 eq 443
!
dialer-list 1 protocol ip permit
dialer-list 2 protocol ipv6 permit
ipv6 route ::/0 Dialer2
!
!
access-list 1 permit 192.168.0.0 0.0.0.255
access-list 2 permit 192.168.3.0 0.0.0.255
access-list 23 permit 10.10.10.0 0.0.0.127
access-list 200 deny   0x86DD 0x0000
access-list 200 permit 0x0000 0xFFFF
!
ipv6 access-list v6acldeny
 permit icmp any any echo-request
!
ipv6 access-list v6alist
 permit icmp any any
bridge 1 protocol ieee
!
 vstack
!
line con 0
 login local
 no modem enable
 length 0
line vty 0 4
 access-class 1 in
 privilege level 15
 login local
 length 0
 transport input telnet ssh
line vty 5 15
 access-class 1 in
 privilege level 15
 login local
 length 0
 transport input telnet ssh
!
scheduler allocate 20000 1000
!
end

mbed IDEからエクスポートしたMercurialレポジトリにcommitしようとしたらディレクトリが無えよと怒られた件

> hg add .
adding .cproject
adding .project
(省略)

> hg status
A .cproject
A .hgignore
A .mbed
A .project
(省略)

で、ファイルとディレクトリが追加されたことを確認した上で、コミットしようとすると以下のようなエラーが発生する

> hg commit
abort: could not lock repository /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: No such file or directory

> file /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led
/mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: directory

🤔🤔🤔🤔No such file or directoryって言われても存在するんだが…???

エラーの原因を調べてみる

Mercurialにはデバッグ用のオプションがあるのでそれを付けてやることで、普段は表示されない細かなエラーログを表示させることができる。

DebuggingFeatures - Mercurial

--debug--verbose--tracebackオプションを付けて再度hg commitすると以下のような出力が得られる。

> hg --debug --verbose --traceback commit
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 191, in _runcatch
    return _dispatch(req)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 924, in _dispatch
    cmdpats, cmdoptions)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 681, in runcommand
    ret = _runcommand(ui, options, cmd, d)
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 1055, in _runcommand
    return checkargs()
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 1015, in checkargs
    return cmdfunc()
  File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 921, in <lambda>
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/usr/lib/python2.7/dist-packages/mercurial/util.py", line 993, in check
    return func(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mercurial/commands.py", line 7013, in verify
    return hg.verify(repo)
  File "/usr/lib/python2.7/dist-packages/mercurial/hg.py", line 815, in verify
    ret = verifymod.verify(repo)
  File "/usr/lib/python2.7/dist-packages/mercurial/verify.py", line 25, in verify
    with repo.lock():
  File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1346, in lock
    self.invalidate, _('repository %s') % self.origroot)
  File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1306, in _lock
    parentlock=parentlock)
  File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 57, in __init__
    self.delay = self.lock()
  File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 87, in lock
    self._trylock()
  File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 129, in _trylock
    why.filename, self.desc)
LockUnavailable: [Errno 2] No such file or directory: '/mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led/.hg/store/lock'
abort: could not lock repository /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: No such file or directory

エラーの原因はレポジトリが格納されているディレクトリそのものではなく、格納されているディレクトリ内の.hg/store/lockが存在しない事に起因することが分かる。
lockファイル自体はロック用のファイルなので、.hg内にstoreディレクトリを作成してみる。

> mkdir .hg/store
> hg commit
> hg log
changeset:   0:b4a651370c4a
tag:         tip
user:        Yuka Nakano <nakanoyuka@hogehoge.com>
date:        Tue Sep 12 02:31:45 2017 +0900
summary:     add files.

以上、正常にコミット出来たことを確認して終了。

追記

mbed IDE上で一度もコミットしていないと、storeディレクトリが無い状態でリポジトリがエクスポートされる可能性があるので、もし一度もコミットしていないのならしてからエクスポートした方が良いかもしれない。
また、一度もコミットしてないレポジトリはパブリッシュ出来ないので注意する必要がある。(ローカルからmbed IDE上のリモートレポジトリにプッシュするにはパブリッシュする必要がある)

あとがき

dic.nicovideo.jp

中野有香かわいい。

pixivで楽にブックマーク出来るようにするuserscriptをつくってみた

f:id:kazuki09:20170423035711p:plain

iOS/Androidアプリ版のようにポチッと押すだけでブックマークに追加してくれる機能がブラウザ版にも欲しかったので簡単なUserscriptを書いてみました。

続きを読む

OrangePi PC2を買ってみたのでArchLinuxのイメージをビルドしてみた

f:id:kazuki09:20161122195239j:plain お久しぶりです。もやしきんぐです。
最近いろいろと噂になっていた中国深センのXunlong製のOrange Pi PC2を買ってみたので、それで使うArchLinuxのイメージファイルをビルドしてみました。

続きを読む

Windows10の仮想デスクトップをOSXのMission Control風に操作できる、TaskViewGestureToolkitをつくってみた

Mac OS XのMission Controlみたいに三本指で横にスワイプすると仮想デスクトップを切り替える機能がWindows10の仮想デスクトップに無かったのでつくってみました。

続きを読む

Linux版SoftEther VPN Clientでプロキシを使う方法

大学の学内ネットワーク(HTTP/HTTPSプロキシのみがゲートウェイに使える環境)からSSHを使う必要が出たので、その時に外部のVPN鯖を使ってバイバスした時のメモ。
クライアント・サーバー両方にArch Linuxを使いました。

続きを読む

Windows10のUEFIブートローダーを修復してみた

先日Windows10 Pro x64を再インストールしたところ何故かUEFIブートローダー(Windows Boot Manager)がLinuxを入れている方のSSDに入ってしまい、それを取り外した際にWindowsが起動しなくなったのでUbuntuのLiveDVDとWindowsのインストールメディアを使って修復してみたのでメモ。

続きを読む