概要

フレッツ光では OpenSSH が設定する DSCP 値の関係で SSH のパケットが NGN 網で捨てられてしまう問題が発生します12。端的にはこの記事の指摘通り ssh_config を以下のように修正すれば解決できます。

Host foo.example.com
    HostName  foo.example.com
    IPQoS     0

しかしながら、このような設定はルーター側で設定しておいたほうがクライアント側の設定が少なくて済むので楽です。今回は EdgeRouter X のファイアウォール機能を使って、ルーターにやってきた SSH のパケットの DSCP 値を変更するように設定してみます。

環境

モデル

EdgeRouter X 5-Port

EdgeOS

v1.10.9

Linux

ubnt 3.10.107-UBNT

手順

CLI からファイアウォールの設定を行います。
アドレスやポート番号等は適宜読み替えてください。

$ configure

# SSH に使われるアドレス
$ set firewall group ipv6-address-group ADDRESS6_SSH description 'Addresses for SSH'
$ set firewall group ipv6-address-group ADDRESS6_SSH ipv6-address '2001:db8::1'

# 上記アドレスが宛先の TCP パケットの DSCP 値を 0 に変更
$ set firewall ipv6-modify LAN6_PBR rule 10 action modify
$ set firewall ipv6-modify LAN6_PBR rule 10 destination group ipv6-address-group ADDRESS6_SSH
$ set firewall ipv6-modify LAN6_PBR rule 10 destination port 22
$ set firewall ipv6-modify LAN6_PBR rule 10 modify dscp 0
$ set firewall ipv6-modify LAN6_PBR rule 10 protocol tcp

# 設定したファイアウォールのルールをインターフェイスに設定
$ set interfaces ethernet eth0 firewall in ipv6-modify LAN6_PBR

$ commit; save

こうしておけば各端末で優先度の設定を意識することなくルーター側で適切な DSCP 値でパケットを送り出せるようになります。

脚注