RouterOS Xpass 固定IPアドレス(ひかりクロス)の設定方法
はじめに
セットアップしたあとにconfigを見ながら記載しているので作業の順番は違うかもしれないが、参考になればと
RouterOSは現状IPv6のfasttrackに対応していない(2023/05/06時点)ためか1Gbpsあたりで頭打ちするので、ひかりクロスでわざわざやる必要はあまりなさそう
環境
- CCR2004-1G-12S+2XS
- 7.9 (stable)
- enひかりクロス with Xpass(DS-Lite) 固定IPオプション付き
Xpass固定IP情報の案内について
以下の情報が案内されるはず
- IPv4アドレス
- Tunnel destination アドレス
- FQDN
- DDNS ID
- DDNSパスワード
- Basic認証ID
- Basic認証パスワード
- DDNSアップデート先URL
手順
不要なサービスの停止、サービスへのACLの設定
脆弱性とかが出たときに不用意に悪用されないように、最低限のルールを追加しておく
/ip/service/
set telnet disabled=yes
set ftp disabled=yes
set www disabled=no address=192.168.0.0/16
set ssh disabled=no address=192.168.0.0/16
set www-ssl disabled=yes
set api disabled=yes
set winbox disabled=no address=192.168.0.0/16
set api disabled=yes
set api-ssl disabled=yes
bridgeの追加
sfp-sfpplus1をWANとしてbridge-wanに追加、それ以外のインターフェースをデフォルトで用意されているbridgeに追加する
わざわざbridge-wanを追加しているのは、これをしないとIPIPv6の速度ができないというバグへの対応
/interface bridge
add arp=proxy-arp name=bridge protocol-mode=none
add arp=proxy-arp name=bridge-wan protocol-mode=none
/interface bridge port
add bridge=bridge ingress-filtering=no interface=ether1
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus2
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus3
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus4
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus5
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus6
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus7
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus8
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus9
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus10
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus11
add bridge=bridge ingress-filtering=no interface=sfp-sfpplus12
add bridge=bridge-wan interface=sfp-sfpplus1
add bridge=bridge interface=sfp28-1
add bridge=bridge interface=sfp28-2
インターフェースリストの設定
/interface list
add name=WANv4
add name=WANv6
add include=WANv4,WANv6 name=WAN
add name=LAN
/interface list member
add interface=bridge-wan list=WANv6
add interface=xpass list=WANv4 # これはあとで追加する
add interface=bridge list=LAN
IPv6の設定
accept-router-advertisementsを有効にして、フレッツ網からの広告を受け取れるようにする
ひかりクロスの場合は/56でIPv6アドレスのprefixが広告されるので、pool-prefix-elngth=56としておく
dhcp-clientを設定したあとに受け取ったprefixを確認する
/ipv6 settings
set accept-router-advertisements=yes max-neighbor-entries=8192
/ipv6 dhcp-client
add add-default-route=yes interface=bridge-wan pool-name=flets pool-prefix-length=56 request=prefix use-interface-duid=yes
print
受け取ったIPv6プレフィックスから適当にsfp-sfpplus1にアドレスをアサインしておく
/ipv6 address
add address=<受け取ったIPv6プレフィックス>::1/128 advertise=no interface=sfp-sfpplus1
add address=<受け取ったIPv6プレフィックス>/64 eui-64=yes interface=bridge
/ipv6 dhcp-server
add address-pool=flets interface=bridge name=flet-pd
/ipv6 firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn
IPv6にあまり詳しくないので自信がないが、適当にfilter設定もいれておく
LAN内のサーバがグローバルからアクセスできない程度には設定できているはず
/ipv6 firewall filter
add action=accept chain=forward comment="accept established,related,untracked" connection-state=established,related,untracked
add action=accept chain=input comment="accept established,related,untracked" connection-state=established,related,untracked
add action=drop chain=input comment="drop invalid" connection-state=invalid
add action=accept chain=input comment="accept ICMPv6" protocol=icmpv6
add action=accept chain=input comment="accept UDP traceroute" port=33434-33534 protocol=udp
add action=accept chain=input comment="accept DHCPv6-Client prefix delegation." dst-port=546 protocol=udp src-address=fe80::/10
add action=drop chain=input comment="drop everything else not coming from LAN" in-interface-list=!LAN
add action=drop chain=forward comment="drop invalid" connection-state=invalid
add action=drop chain=forward comment="rfc4890 drop hop-limit=1" hop-limit=equal:1 protocol=icmpv6
add action=accept chain=forward comment="accept ICMPv6" protocol=icmpv6
add action=accept chain=forward comment="accept HIP" protocol=139
add action=accept chain=forward comment="accept WireGuard" dst-port=13231 protocol=udp
add action=drop chain=forward comment="drop everything else not coming from LAN" in-interface-list=WANv6
IPIPv6の設定
enひかりから通知されたTunnel destinationアドレスをremote-addressに設定するだけ
/interface ipipv6
add !keepalive local-address=:: name=xpass remote-address=<Tunnel destination アドレス>
Xpass DDNSアップデートの通知
サーバ証明書の検証に失敗するのでcheck-certificate=noを指定して、DDNSアップデートをリクエストをする
/tool/fetch http-method=get check-certificate=no user=<Basic認証ID> password=<Basic認証パスワード> url="<DDNSアップデート先URL>?d=<DDNS ID>&p=<DDNSパスワード>&a=<受け取ったIPv6プレフィックス>::1&u=<FQDN>" mode=https
IPv4アドレス周りの設定
払い出されたIPv4アドレスをIPIPv6インターフェースにアサインする
また一部のサイト(GitHubなど)にアクセスできないためにclamp-to-pmtuを指定しておく
加えてmasqueradeでxpassからでるときは払い出されたIPアドレスで出るようにする
/ip address
add address=<IPv4アドレス> interface=xpass network=<IPv4アドレス>
/ip firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu out-interface-list=WAN passthrough=yes protocol=tcp tcp-flags=syn
/ip firewall nat
add action=masquerade chain=srcnat out-interface=xpass to-addresses=<IPv4アドレス>
IPv4の通信はすべてIPIPv6トンネルに向くようにしておく
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=xpass routing-table=main suppress-hw-offload=no
IPv4でも適当にfilterルールを設定する
/ip firewall filter
add action=fasttrack-connection chain=forward comment=fasttrack connection-state=established,related,untracked hw-offload=yes
add action=accept chain=forward comment="accept established,related,untracked" connection-state=established,related,untracked
add action=accept chain=input comment="accept established,related,untracked" connection-state=established,related,untracked
add action=accept chain=input comment="accept from LAN" src-address=192.168.0.0/16
add action=drop chain=forward comment="drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new in-interface-list=WANv4 log=yes log-prefix="[DROP] "
add action=drop chain=input comment="drop invalid" connection-state=invalid
add action=drop chain=input comment="drop all not coming from LAN" in-interface-list=!LAN log-prefix="[DROP] input not from LAN - "
Discussion