OpenWrt 21.01 22.03 23.05 FW4 OCNバーチャルコネクト + ニチバン対策 全自動構成@node 旧版

# こちらに統合しました
https://qiita.com/site_u/items/c6a50aa6dea965b5a774

# BASH版
- 軽量なbash版に移行しました
※ 375kB + α

https://qiita.com/site_u/items/298a6c2c4d6797e38cd0

# はじめに
::: note
### 初心者対応構成
- スクリプトでの自動設定
- UCIとLuCi及びWinSCPにて比較しながら作業がおススメ
:::

::: note
### [PowerShell](https://learn.microsoft.com/ja-jp/powershell/scripting/what-is-windows-powershell?view=powershell-7.4)で[SSHアクセス](https://openwrt.org/docs/guide-quick-start/sshadministration)

- [PowerShellの開始](https://learn.microsoft.com/ja-jp/powershell/scripting/windows-powershell/starting-windows-powershell?view=powershell-7.4) (キー入力)：`Win`+`x` > `a` > `はい`
※Windows7以降標準搭載

```sh
ssh root@192.168.1.1
```

<details><summary>ssh root@192.168.1.1のショートカット作成（デスクトップ）</summary>

```powershell:powershell
$DESKTOP = ([Environment]::GetFolderPath("Desktop") + "\192.168.1.1.lnk")
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$DESKTOP")
$Shortcut.TargetPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$Shortcut.Arguments = '-windowstyle hidden -ExecutionPolicy RemoteSigned "Start-Process ssh root@192.168.1.1"'
$Shortcut.IconLocation = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe,0"
$Shortcut.WorkingDirectory = "."
$Shortcut.Save()

```

- `強制的に貼り付け`
- `yes`

---

</details>

<details><summary>SSHログイン出来ない場合:exclamation:</summary>

known_hostsクリア
- `C:\Users\yourusername\.ssh\known_hosts` ※Windows隠しファイル
```powershell:powershell
Clear-Content .ssh\known_hosts -Force

```
---
OpenSSHのインストール
※Windows 10 Fall Creators Update(1709)以降標準搭載
- 機能の確認
```powershell:powershell
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

```
- 機能のインストール
```powershell:powershell
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

```
---

</details>

:::

:::note note
### 対応回線
自動設定 : **回線直結全自動構成**
- 対応回線業者：[NTT Com](https://www.ntt.com/index.html)
  - [OCNバーチャルコネクト](https://www.ntt.com/business/services/network/internet-connect/ocn-business/option/v-access-ipoe.html)
    - [OCN インターネット](https://service.ocn.ne.jp/hikari/ocn-internet/)
      - [OCN 光、OCN for ドコモ光](https://service.ocn.ne.jp/hikari/docomo/)
    - [ahamo光](https://www.docomo.ne.jp/internet/ahamo_hikari/)
    - [ぷらら光](https://www.plala.or.jp/p-hikari/)
    - [hi-ho光](https://hi-ho.jp/course/hikari/hi-hohikari/)
- 対応機器 : [光回線終端装置 (ONU)](https://ja.wikipedia.org/wiki/%E5%85%89%E5%9B%9E%E7%B7%9A%E7%B5%82%E7%AB%AF%E8%A3%85%E7%BD%AE) ※ [ホームゲートウェイ (HGW) 非対応](https://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%BC%E3%83%A0%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4)
- 対応認証 : IPoE接続 ※ PPPoE接続非対応
- 対応ファームウェア : [22.03 以降 ※FW4 (firewall4)](https://openwrt.org/docs/guide-user/firewall/misc/nftables#nftables_in_openwrt_2203_and_later)
- 構成状態 : ネットワークインターフェース初期値前提
- スクリプト : [config-softwire](https://github.com/site-u2023/config-softwire/blob/main/README.md) (JavaScript) / [map-e](https://github.com/site-u2023/map-e)
- パッケージ : [map](https://openwrt.org/packages/pkgdata/map) / [node](https://openwrt.org/packages/pkgdata/node) @ JavaScriptをデバイスで動かす
- 必要フラッシュ容量 : 12 MiB 以上 @ node
- 動作確認 : 23.05.0-rc2 @ WXR-5950AX12
- 設定詳細 : [参考サイト](https://qiita.com/site_u/items/b743f96311d6bf7d66a7#%E5%8F%82%E8%80%83%E3%82%B5%E3%82%A4%E3%83%88%E6%84%9F%E8%AC%9Drelaxed)

※ [OCN バーチャルコネクトは仕様上 24時間毎に接続が途切れますがルーターの故障などではございません](https://www.google.com/search?rlz=1C1PWSB_jaJP1049JP1049&sxsrf=APwXEdfnAY5IdOCzCAnREanRAvs7vqn0jQ:1687948477954&q=OCN+%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%82%B3%E3%83%8D%E3%82%AF%E3%83%88%E3%81%AF%E4%BB%95%E6%A7%98%E4%B8%8A+24%E6%99%82%E9%96%93%E6%AF%8E%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%8C%E9%80%94%E5%88%87%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8C%E3%83%AB%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AE%E6%95%85%E9%9A%9C%E3%81%AA%E3%81%A9%E3%81%A7%E3%81%AF%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93&sa=X&ved=2ahUKEwi5wrWL4uX_AhXVBIgKHS4RBvgQ1QJ6BAg1EAE)
:::

# 全自動構成 (ニチバン対策含む) ※ 要ONU直結
::: note
### インストール
```ruby
# package
opkg update
opkg install map
opkg install node

reboot

```

### 全自動構成
```ruby
# config-softwire
wget --no-check-certificate -O /lib/netifd/proto/map-e.js https://raw.githubusercontent.com/site-u2023/config-softwire/main/map-e.js

# map-e
cp /lib/netifd/proto/map.sh /lib/netifd/proto/map.sh.bak
wget --no-check-certificate -O /lib/netifd/proto/map.sh https://raw.githubusercontent.com/site-u2023/map-e/main/map.sh.new

# scripts
. /lib/functions/network.sh
network_flush_cache
network_find_wan6 NET_IF6
network_get_device NET_L2D6 "${NET_IF6}"
network_get_ipaddr6 NET_ADDR6 "${NET_IF6}"
NODE_RET=$(node /lib/netifd/proto/map-e.js "$NET_ADDR6")
eval "$NODE_RET"

# DHCP WAN6
uci set dhcp.wan6=dhcp
uci set dhcp.wan6.interface='wan6'
uci set dhcp.wan6.ignore='1'
uci set dhcp.wan6.master='1'
uci set dhcp.wan6.ra='relay'
uci set dhcp.wan6.dhcpv6='relay'
uci set dhcp.wan6.ndp='relay'

# DHCP LAN
uci set dhcp.lan=dhcp
uci set dhcp.lan.dhcpv6='server'
uci set dhcp.lan.ra='relay'
uci set dhcp.lan.ndp='relay'
uci set dhcp.lan.force='1'

# WAN6RA
WAN6RA='wan6ra'
uci set network.${WAN6RA}=interface
uci set network.${WAN6RA}.proto='static'
uci set network.${WAN6RA}.device=${NET_L2D6}
uci set network.${WAN6RA}.ip6gw=${CE}::1
uci set network.${WAN6RA}.ip6prefix=${CE}::/56
uci add_list network.${WAN6RA}.ip6addr=${CE}::1001

# WAN
uci set network.wan.auto='0'

# WANMAP
WANMAP='wanmap'
uci set network.${WANMAP}=interface
uci set network.${WANMAP}.proto='map'
uci set network.${WANMAP}.maptype='map-e'
uci set network.${WANMAP}.peeraddr=${option_peeraddr}
uci set network.${WANMAP}.ipaddr=${option_ipaddr}
uci set network.${WANMAP}.ip4prefixlen=${option_ip4prefixlen}
uci set network.${WANMAP}.ip6prefix=${option_ip6prefix}
uci set network.${WANMAP}.ip6prefixlen=${option_ip6prefixlen}
uci set network.${WANMAP}.ealen=${option_ealen}
uci set network.${WANMAP}.psidlen=${option_psidlen}
uci set network.${WANMAP}.offset=${option_offset}
uci set network.${WANMAP}.legacymap='1'
uci set network.${WANMAP}.mtu='1460'

# FW
ZOON_NO='1'
uci del_list firewall.@zone[${ZOON_NO}].network='wan'
uci add_list firewall.@zone[${ZOON_NO}].network=${WANMAP}
uci add_list firewall.@zone[${ZOON_NO}].network=${WAN6RA}

uci commit

# map
sed -i -e "s/ip4prefixlen=32/ip4prefixlen=${option_ip4prefixlen}/g" /lib/netifd/proto/map.sh

reboot

```

### 疎通確認
- OCNバーチャルコネクト
  - [OCN](https://v6test.ocn.ne.jp/)
  - [ぷらら](https://web1.plala.or.jp/ipoe/ipchecker/)
  - [ドコモnet](https://v6test.docomonet.jp/)
- 他
  - [test-ipv6.com](https://test-ipv6.com/)
  - [Google](https://ipv6test.google.com/)

### ポート動作確認
- [ニチバンベンチ](https://www.nichiban.co.jp/)
:::

::: note
### 利用可能ポート番号確認
```ruby
. /lib/functions/network.sh
network_flush_cache
network_find_wan6 NET_IF6
network_get_ipaddr6 NET_ADDR6 "${NET_IF6}"
NODE_RET=$(node /lib/netifd/proto/map-e.js "${NET_ADDR6}")
eval "$NODE_RET"
echo "${PORT}"

```
:::

# リムーブ
:::note warn
### リムーブ
- node
- map-e.js
```ruby
# node
opkg remove node

#map-e.js
rm /lib/netifd/proto/map-e.js

```
### レストア
- map.sh
```ruby
# map.sh
cp /lib/netifd/proto/map.sh.bak /lib/netifd/proto/map.sh
rm /lib/netifd/proto/map.sh.bak

```
:::

# トラブルシュート
:::note warn

```ruby
# prefix確認
echo ${PREFIX}

```

```ruby
# node確認
ls /usr/lib/opkg/info/node*

```
:::

# [IPv6](https://qiita.com/site_u/items/1a684806a6eb36541fa5)
::: note
### [ルーターアドバタイズメントとDHCPv6](https://qiita.com/site_u/items/1a684806a6eb36541fa5#%E3%83%AB%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%89%E3%83%90%E3%82%BF%E3%82%A4%E3%82%BA%E3%83%A1%E3%83%B3%E3%83%88%E3%81%A8dhcpv6)

### [IPv6 の追加機能](https://qiita.com/site_u/items/1a684806a6eb36541fa5#ipv6-%E3%81%AE%E8%BF%BD%E5%8A%A0%E6%A9%9F%E8%83%BD)

:::
# [チューニング及びベンチマーク](https://qiita.com/site_u/items/599124e2904d1374c2c9)
::: note
### [SQMチューニング](https://qiita.com/site_u/items/599124e2904d1374c2c9#sqm%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0)
:::

# あとがき
- バーチャルコネクト未設定状態でもopkgのDLは可能
- クライアントにWARPをインストールすればV4も拾う※CloudflareのIP
  - [one.one.one.one](https://one.one.one.one/)
    - [Windows用WARP](https://1111-releases.cloudflareclient.com/windows/Cloudflare_WARP_Release-x64.msi)

- こんなんもあります、皆さん凄いですね
  - [linux-map-e-ocn](https://github.com/marcelocf/linux-map-e-ocn/blob/main/README.md)

- firewall.zoon[*]　ゾーン番号がうまく自動で拾えないな
# 参考サイト(感謝:relaxed:)
- [OpenWRT 22.03でIPoE(OCNバーチャルコネクト)接続する](https://note.com/sol_stl/n/nd230789b24b1)
- [openwrt-jp-ipoe](https://github.com/fakemanhk/openwrt-jp-ipoe)