alchemistarkの日記

やったことのメモ

トラベルルータをつくろう

なんでこんな苦戦したんだろう…
まぁそれはさておき。

VPNクライアントとして持ち運べるルータを作ろうと頑張ってたんですが
これトラベルルータやんってなってる

持ち運びすることを考慮するとなるべく小型の素体が良いと思われる
OpenWrt導入可能でってなるとMangoとか3000円~のやつもあるけど
BUFFALOのWCR-1166DSが安く手に入って良い。

paypayfleamarket.yahoo.co.jp

大きな欠点としては有線100Mbpsしかない事だが*1、どうしても1Gbps出ないと困る事もそう無いと思う。困るなら諦めてデッカいルーターか高いルーター買おう。*2

NECのWG1200CRも小さいんだがファームウェアの当たりを引く必要がある上に自動アップデートされて終了してる可能性が高い。*3


OpenWrtの導入は省略。投げ込むだけ。
導入パッケージは(日本語と)WireGuardのみ。*4
ていうかそれだけで空きが半分以下になる。

前提として、既存ネットワークに2重NATでぶら下がる構成とします。

・ネットワーク
 ・グローバルネットワークオプション
   >IPv6 ULA プレフィックスを設定→適当なULA
    LLAだと繋がらない? 適当なULAを設定しておく*5
 ・インターフェース
  ・LAN
   ・詳細設定
    >IPv6 割り当て長→64
     ULA配布の為
   ・DHCPサーバー
    ・一般設定
     >DHCPオプション→必要ならDNSサーバーを広告させる*6
    ・IPv6設定
     >RA-Service→サーバーモード
     >他→無効
     >Announce IPv4/6 DNS servers→パブリックDNSサーバーを設定する場合は入力
    ・IPv6 RA設定
     >デフォルトルーター→強制
     >Router Priority→高(念の為
  ・wan6
   ・詳細設定
    >IPv6 source routing→チェックを外す*7
   ・DHCPサーバー
    >Designated master→チェック
  ・新規作成→wg0
   ・一般設定
    >構成をインポート→WG-Easyなどから構成ファイルを準備して読み込ませる
   ・詳細設定
    >MTU→環境に合わせて調整
   ・ファイアウォール設定
    >ゾーンの割り当て→wan
   ・ピア
    >許可されたIP→VPN接続先のIPレンジ
    >許可されたIPのルート→チェック
    →要インターフェース再起動
 ・ファイアウォール
  >Flow offloading type→ハードウェアフローオフロード*8
  ・wan
   ・詳細設定
    >IPv6 マスカレード→チェック
 ・DNS
  ・DNSレコード
   >ホスト名→必要なら
    使用する場合はopenwrtをDNSサーバーとして広告すること
  ・フィルター
   >DNSリバインディング保護→チェックを外す
    自分の環境では外さないとDNSが不安定になる…*9

設定したり戻したりを繰り返してたのでよくわからなくなってるんだけど
多分設定してるのこれぐらいだと思う。はいただの作業メモです。

とりあえずこれで上位ネットワークを利用しつつVPN接続もできるようになるはず
wwan使ったりAPにしたりは技適がアレなので各自判断で。
最低限出力*10と国コードはちゃんと設定しよう

*1:あとCPUが弱いのでLuciが重い

*2:WRC-1167GST2あたりが比較的小さい(160x141)

*3:…使い道を考えなきゃ。

*4:luci-proto-wireguard入れたら全部付いてくると思う

*5:fd00::/48など

*6:IPv6のDNSサーバーが優先されるかもしれない

*7:NAT6の使用に必要、要wan6再起動

*8:効果あって欲しい

*9:なんで?

*10:10mW

WireGuardで通信不安定な場合

MTU値の確認しましょうねってメモ。

確認方法は

ping -f -l [サイズ] <宛先>

で、WireGuardの初期値は1420、1360程度にしろって記事もあるけど
ここだと1330まで下げないとダメだったので、各自ちゃんと確認しましょうねってお話*1
ここはOpenWrtをクライアントにしてウチの鯖まで飛んでる環境でな 色々経由してっからヘッダペタペタされてるんでしょう多分
他のクライアントも速度に拘らないなら下げたほうがいいかも。繋がらないより全然良き。

*1:環境によるので

OpenWrt IPv6-PDが無い環境で内向きDNSを使いたい

広告ブロックでDNS立ててるとか、自宅サーバーにホスト名でアクセスしたいとか
ちょっぴり逸般の誤家庭の皆様におかれましてはプロバイダのDNSサーバーなんかにアクセスしない*1と思われますが

プロバイダからIPv6がRAで振ってきてる環境*2では大抵のIPoEルーターはNDプロキシとかでの接続になりプロバイダのRAが素通りすることになります
となると各端末にはプロバイダのDNSサーバーが広告され、これを止める手立ては基本無いです。

端末側で手動設定すれば解決しますが、ノートPC等の移動端末を接続している場合は面倒なので極力ルータから受け取りたい。

下位にブリッジでOpenWrtを繋いでいる環境なので、追加で広告してどうなるか確認。

>RAをハイブリッドモードにする*3
プロバイダのDNSサーバーが優先された

>DHCPv6をハイブリッドモードにする
広告したDNSサーバーが優先された
ただししばらくすると消える(タイムアウト?

>両方ハイブリッドモードにする
DNSサーバーが2回登録されたのでダブった。
2つとも優先になったので使用には問題ない。

また、RAでRAライフタイムを0にした方が良いと先生が仰るので0に設定。
今のところ消えたりはしていないようだ。
消えたのでRA Retransmission Timerを入力(最大値60000)入れて様子見。
ぐわー消えたンゴ

今回の環境ではwanを使用せず全てブリッジで接続していたので
RAとDHCPv6用にDHCPv6クライアントインターフェースを作成するハメになった。
同一ネットワークなのでLANゾーンに入れ、wan6からRAとDHCPv6を流す感じに。*4

今回環境では2重NATを避けたのでこうなっているが、2重NATにしてOpenWrtで1回受けたらできるだろうか…?

RAがリレーかハイブリッドでないとデフォルトゲートウェイを得ることができず、同時にどうしてもDNSサーバーを押し付けられる。ダメです。

NAT6使わないとダメなんかなぁ~
NAT6使うにチェック入れたけどダメだなぁ~
一応グローバル付与されてて端末にデフォゲもDNSもOpenWrt向いた状態まで行ったんだけどなぁ…


コネコネしてたらハイブリッドじゃなくてサーバーモードが選べるようになってたので設定
ルータ優先度を高にしてライフタイムを0、自身をDNSサーバーとして通知

これでも1回だけDNSサーバー消えたんだけど、それ以外は持っているというか
何故かIPv4でDNSサーバーを見に行くようになってしまった。なんで?
→時間が経ったらIPv6を見に行ってた 謎

上位ルーターを交換したりもしてるんだが、上位ルーターは民生品なのでそんな挙動に違いがあるとも思えない…*5


wanポートを使用せずやる場合はこれが限界かな…?
自分用に最終設定をメモ。

・wan6インターフェースの使用を廃止*6

・ULAは配布しておく
・静的アドレスでインターフェースを作成
・IPv6アドレスは設定しない
・IPv6プレフィックスの委任 →ON
・IPv6割り当て長 →64
・RA-Service、DHCPv6-サービス →サーバーモード
・ローカル IPv6 DNS サーバー →ON
・Router Priority →高
・RA フラグ →MO
・RA ライフタイム →0

もし続きをやるとしたらwanポート使用してNAPTv6使う場合を調べる感じやね

*1:過激表現

*2:ひかり電話なし環境

*3:自分の環境ではサーバーモードが選べなかった為

*4:各端末はL2でIPoEのルーターに繋がっているのでそっちから全部貰っている

*5:Aterm→ダメルコ

*6:マスターがリレーだとサーバーモードが選べないのかな多分

また思った通りにならないわけで

既存NWに乗っかる形でゲストポートとVPNアクセスを構成しようとしている。

既存NWに乗るのでwanインターフェースは使用できない。lanブリッジにゲートウェイが接続される。
lanブリッジにデフォルトゲートウェイ(とDNS)を設定し、外部疎通へはOK。

ゲストポートに関しては先のdhcp設定と、DNSアクセスを許可し
lanゾーンへの転送を拒否しておけばいいだろう。

ゲストポートは別セグメントになるので、個別にNATするように設定しておく。

取り急ぎ、ゲストポートしては以上。

次はWireGuardをクライアントとして設定するのだが、WG-Easyの設定ファイルを読み込ませればだいたいいける。楽でありがたい。

許可されたIPにVPN接続先のIP帯を設定し、許可されたIPのルートにチェックを入れておく。

後はOpenWrtをデフォルトルートにしておけば繋がると思う。やったぜ。


では何が気に入らないかと言うと、lanゾーンにNATが必要。ここまでやって2重NATのオチ。
(戻りルート自体は問題無いのだが、非対称になる為ドロップする)

これを回避する場合、既存NWのルーターでVPN側IPへの静的ルートを設定すれば良い。解決。デフォルトルートも元のままで良くなる。
静的ルートでは非対称性は解消されないっぽい。DHCPでopsion121を設定して静的ルートを追加するのが良いようだ。
また、FW設定の無効なパケットを遮断するのチェックを外すと疎通可能。ゾーン単位で行う場合はゾーン設定の"invalid" トラフィックの許可にチェックを入れるらしい。うまくいったりいかなかったりしてる。どっちかにしろ。
とりあえず選択肢が増えたので、(ルータ買ったので)上位ルータのDHCPは残し、静的ルートでWGに飛ばして無効なパケットを遮断するのチェックを外してルートの非対称性を無視するのでやってみよう

問題は今NW設定中のココ、既存ルータがDHCPでデフォルトルートもDNSも広告できないし静的ルートも設定できないゴミってことぐらいか。*1

2重NATを許容すればいいだけなので悩む。どうしたものか。にせんえん握ってハードオフでBUFFALO買ってきた方がスマートではある。

*1:ワイもう一生Atermは買わん

OpenWrt ゲストネットワーク作成時のメモ

ゲストネットワークを作成しているのですが、既存ネットワークに乗っかる形で作成しているのでwanインターフェースを使わずlanインターフェース側にアップリンクがあるという環境で構築中です。
guestゾーンを作成し、lanゾーンを経由してゲートウェイに到達する必要があるのですが
取り急ぎguestゾーンの着信と転送を拒否した関係上dhcpとdnsのポートを着信可にする必要がありうんたら。
そこいらと最終的にNATしてゲートウェイに到達するまでは後々やるとして、取り急ぎdhcpで困ったのでメモ書きを。

dhcpでIPアドレスを貰うにはポート67に着信できるようにしてやれば良いとのことで設定したのですがうまくいかずだいぶ沼ったのですが
lan側機器に間違っても接続できちゃなんねえとOpenWrtのIPアドレスを指定して許可してたんですよ。
dhcpってIP貰う前に行うやり取りなので、ブロードキャスト*1で着信してくるんですよ。ダメじゃん。
なのでIPアドレスを指定せずに、このデバイスを設定するのが正解。時間返して。

*1:255.255.255.255

OpenWRT VerUPに伴うトラブルというか

VerUP来てたので更新したのだが、ちょっと困ったのでメモ*1
本当に大したことではないのだが

・IPv6 PDが取得できなくなった

DUIDの欄が自動入力されているが、コレがあるとNTT網からPDを受領できなくなる。
空欄か、正式な値を入力すること とのこと。

wp.hima-jin.info


前この件について調べた時は「網から」PDを受領する時にはしなければならないという認識だったのだが…
自動生成のDUIDが入力されていても「HGWから」PDは受領できていた気がするが…?ううむ。念の為空欄にしていたのだろうか。そんな記憶はないのだが。
ともあれDUIDを空欄にしたら接続できたのでとにかくNTT回線でPDを貰うにはDUIDの設定が必要ということで。
空欄だと次回更新時にまた自動入力されてしまうので、DUID-LLを入力しておくのが良いだろうとのこと。*2


・mwan3が消えた

公式のではなく別の使ってたので公式ので上書きされちまったい。
Attended Sysupgradeでapkを再インストールする時に公式パッケージに置き換えられてしまいました。せやろな。

forum.openwrt.org


こっちのnftables対応版のmwan3を使っているのでこっちを入れねば。
導入時は/tmpにでもwgetしてapk addすること。

*1:また更新時に同じ事なるので

*2:00030001+MAC

続々・srcds更新確認

戦いは続く

alchemistark.hatenablog.jp

また止まりました。チクショーめ。

今回はUpdateResultが0のまま、FullValidateAfterNextUpdateという項目が増えて1が設定されている。
これも条件に加えればいいのだろうか…

いっそbuildidやら更新日時から引っ掛けれないものかまで考えたが
buildidはちょっとjsonをパースしないといけないっぽい シェルでやれるんか?しらんけど。*1*2
更新日時は出てくるので、比較はしんどいので変化があれば再起動ってのならできるかも。

$ ./steamcmd.sh +app_info_update +app_info_print 232250 +quit | grep "last change"
steamcmd.sh[369]: Starting  /home/steam/steamcmd/linux32/steamcmd
AppID : 232250, change number : 37180058/0, last change : Sun Jul 12 15:09:58 2026 
$ 

app_info_updateが必要か、ちゃんと効くのかはまた次回更新にならんとわかんねぇ…

で、こんな感じでどねえでしょうかと先生に確認したところ
「いやbuildid取れるだろ…」と真顔で返されたので横転

$ steamcmd/steamcmd.sh +login anonymous +app_info_update 1 +app_info_print 232250 +quit | grep -A 4 '"public"' | grep '"buildid"'
steamcmd.sh[485]: Starting  /home/steam/steamcmd/linux32/steamcmd
                                "buildid"               "24151648"
$ 

Oh…取れてるわ…

念の為にpublicとその後4行を表示して確認。大丈夫そうかな?

steamcmdはパスが通ってないと思うので、
/home/steam/steamcmd/steamcmd.shを直接実行して動作確認。

$ /home/steam/steamcmd/steamcmd.sh
steamcmd.sh[544]: Starting  /home/steam/steamcmd/linux32/steamcmd
Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
Logging directory: '/home/steam/Steam/logs'
[  0%] Checking for available updates...
[----] Verifying installation...
UpdateUI: skip show logo
Steam Console Client (c) Valve Corporation - version 1782532820
-- type 'quit' to exit --
Loading Steam API...OK

Steam>

ここまでやってなんだが、どの方法で確認すべきか分からないので
全部チェックして通知するようにしておこう…*3
cron用スクリプト書いたらまた貼ります


とりあえずコレで様子見。

#!/usr/bin/env bash

FILE1="/mnt/app/srcds/tf-dedicated-ar/steamapps/appmanifest_232250.acf"
FILE2="/mnt/app/srcds/tf-dedicated-mge/steamapps/appmanifest_232250.acf"

#FILEからbuildid行を抜き出し、区切り文字を"とし4番目の結果を出力
ID1=$(grep "buildid" $FILE1 | awk -F '"' '{print $4}')
ID2=$(grep "buildid" $FILE2 | awk -F '"' '{print $4}')

#steamcmd実行用コンテナを設定
SRCDS="tf2-dedicated-ar"
#steamcmdのパス
CMD="/home/steam/steamcmd/steamcmd.sh"
#tf2のappID
APPID="232250"

#buildidを取得
NEWID=$(doas docker exec $SRCDS $CMD \
    +login anonymous +app_info_update 1 +app_info_print $APPID +quit \
    | grep -A 4 '"public"' | grep '"buildid"' | awk -F '"' '{print $4}')

echo "ar buildID : $ID1" 
echo "mge buildID : $ID2" 
echo "new buildID : $NEWID" 

#どちらかのbuildidが異なっているならば再起動
if [ "$ID1" != "$NEWID" ] || [ "$ID2" != "$NEWID" ] ; then
	#一旦試験用として再起動を行わず通知のみ実施する
    exit 1
else
    exit 0
fi


更新早かったな たすかるが

steamcmd.sh[778]: Starting  /home/steam/steamcmd/linux32/steamcmd
ar buildID : 24151648
mge buildID : 24151648
new buildID : 24207061

検知成功 buildIDは検知したが、UpdateResultとFullValidateAfterNextUpdateでは検知できず。
buildIDのチェックでコンテナ再起動するように修正しておいた。
これで大丈夫にしてくれー頼むー

*1:jqコマンドが必要だってさ

*2:jsonじゃないらしい。知らんがな…

*3:buildidで比較が一番スマートだと思うのでこれで行きたくはある