自室IPv6化計画の続きです
前回
NAT64は挫折しました
前回NAT64だとアプリケーション層でIPをやりとりするであろう認証入りアプリが使えない、ということでIPv6のみの環境を断念しました。
撤収ということでJoolとUnboundのNAT64設定を削除し、ついでにUnboundの設定を/etc/unbound/conf.d
下に置いて元のconfを一切いじらないように変更しました。
そうだネットワークを整理しよう
これでNAS用MiniPCにはUnboundとRadvdだけ追加された状態に戻ったのですが、ちょっとだけとはいえルータ化しつつあるなって思ってしまったのでじゃぁ本当にルータにしちゃおうと。
つまり、これを
こうじゃ
本当にやりたかったこと
本当はただの中継なのでブリッジ(L2)でやりたかったのですが、LinuxのWifiドライバがブリッジに対応しておらず上手くいかないor不安定にしかならないとか。
ものは試しとNetworkMangerのWifiのコンフィグをBridge-SlaveにしたらどうしてもUPしなく(´・ω:;.:...
ということがあって、ブリッジ化をあきらめてルータ化することにしたというのが実際のところです。
中継器(市販品)がBridgeモードで動いててかつIPでWeb設定画面を開けるので、同じ感じにしたかったのですがなかなか。
構成
MiniPC-デスクトップ間は有線で192.168.0.0/24のネットワーク、MiniPC-ホームルータ間はWifiで192.168.11.0/24のネットワークとしました。
192.168.0.0/24用のDHCPv4を用意しようかと思いましたが最終的にやっぱりIPv6化したいので、RA入っているしAndroidはホームルータのWifiがつかめたので今回は見送りました。
で、この192.168.0.0/24と192.168.11.0/24の中継をip route
コマンドでルート設定……したかったのですが、Gemini先生に聞くとルーティングの設定で中継するとMiniPCからWebが見れなくなるとか。
あと設定も難しいからNATがオススメだよーみたいなこと言われたので、おとなしくマスカレードの方で進めることにしました。いずれ知識がついたらあいるびーばっく。
まずはマスカレード(NAT44)の設定
Fedora41です。
SELinuxはEnforcingにしてますが、特に問題は起きませんでした。
マスカレードの設定はネットを見るとなんか色々書いてるんですが……
-
net.ipv4.ip_forward
を1
にする - インターフェイス(両方)の所属するzoneの
masquerade
をyes
にする
だけでした。
※net.ipv4.ip_forward
はfirewalldのmasqueradeがyesの状態だと自動で1になるとか見ましたが、手動で1にしないと上手く動きませんでした
net.ipv4.ip_forwardの設定
カーネルのネットワークパケット転送許可フラグを立てます。
コメントだけのファイルがあるので下の方に追記します
net.ipv4.ip_forward=1
再起動すれば有効になりますが、再起動したくないときはコマンドで一時的に有効にできます。
$ sysctl -w net.ipv4.ip_forward=1
Firewalldの設定
ネットでよく片側のインターフェイスだけmasqueradeの設定を追加しているのを見たのですが両側に必要でした。代わりによく見たiptablesの設定は不要でした。
っていうかdirectルール(iptablesへの設定)
$ firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o Web側IF -j MASQUERADE
を書いたら、他の設定(FORWARDとか)をしなくてももう転送されちゃうんだけど……
でもFirewalldのmasquerade設定はさらに簡単。
$ firewall-cmd --add-masquerade --zone=内側IFの所属するZone
$ firewall-cmd --add-masquerade --zone=Web側IFの所属するZone
両方のZoneが同じであればadd-masqueradは1回で終わりです。
$ firewall-cmd --list-all --zone=FedoraServer
FedoraServer (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: 内側IF Web側IF
sources:
services: cockpit dns samba squid ssh
ports:
protocols:
forward: yes
masquerade: yes <-- ここがyesになる
forward-ports:
source-ports:
icmp-blocks:
rich rules:
※上手くいったら後でpermanentで設定しなおしておきましょう
デスクトップ側の設定も忘れないように
デスクトップから直接ホームルータに向かう経路がなくなったので、ゲートウェイをMiniPCのアドレスにする必要がありますね。
これだけでネットワーク境界をまたいでpingが通るようになります
> ping 192.168.11.1
(応答)
Firewalld(nftables?)の設定だけでiptablesを使っていないので、iptablesへは何も設定されない状態でフィニッシュです。
$ sudo iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
$ sudo iptables --list -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
I'm back! (NATではなくルーティングで)
ネットワークの勉強を進めていると、こんなにシンプルな構成なのでもっと簡単にRoute設定できるはず……と思って再挑戦。
まずはマスカレードを取りやめます。
$ sudo firewall-cmd --remove-masquerade
$ sudo firewall-cmd --remove-masquerade --permanent
ホームルータ(192.168.11.0/24)のネットワークから自室(192.168.0.0/24)のネットワークに向かう時は、MiniPC(192.168.11.151)を通るように設定します。
デスクトップ側はマスカレードの時にMiniPC(192.168.0.1)をIPv4ゲートウェイとする設定をしたので、そのままにしておきます。
そしていよいよ本丸、MiniPCに中継の経路の設定……あれ?自動設定のまま特に追加する必要ないのでは。
$ ip route
default via 192.168.11.1 dev wlo1 proto static metric 600
192.168.0.0/24 dev enp1s0 proto kernel scope link src 192.168.0.1 metric 100
192.168.11.0/24 dev wlo1 proto kernel scope link src 192.168.11.151 metric 600
デスクトップ(192.168.0.0/24側)に向かう時は有線(192.168.0.1)を通るし、ホームルータ(192.168.11.0/24側)に向かう時はWifi(192.168.11.151)を通るようになってますね。
もしや……
> ping 192.168.11.1
(応答あり)
> tracerc www.goog.com
1 <1 ms <1 ms <1 ms 192.168.0.1
2 3 ms 1 ms 1 ms 192.168.11.1
3 7 ms 3 ms 5 ms プロバイダ [xxx.xxx.xxx.xxx]
...
あれ、できちゃった。
まとめると
まずネットワークをまたぐのでip_fowardの設定は必須です
net.ipv4.ip_forward=1
ルーティングテーブルの変更は、ルータ(MiniPC)側には特に必要なくルータ(MiniPC)につなぐ方を設定します。
デスクトップ(ウインドウズ)はIPv4ゲートウェイ
、ホームルータは経路情報の追加
で設定しました。
MiniPCのルータ化、できたーヽ(´ー`)ノ
WebだけでもIPv6化する
CG制作ソフト(とゲーム)が全滅したのでIPv4のルートはなくせないのですが、WebだけでもIPv6化を果たすことにしました……途中まで。つまりこう
ここはIPの変換とかそんな話じゃなくて普通にWebProxy(Squid)です。
Squidのインストール
Gemini先生にSquidより簡単なWebProxyある?って聞いたらSquidほど簡単なWebProxyはないでござるぞ?って諭されたのでおとなしくSquidです。
昔やたら重たかった記憶があって敬遠してたSquidですが今回使ってみたらそんなことはありませんでした。
デフォルトではファイル(/var/spool/squid)にキャッシュされずメモリ(256MB)にキャッシュされるとのことで、記憶と違ってとても快適でした。
$ dnf install squid
$ systemctl enable squid
Squidの設定
IPv6化計画のための導入なのでIPv6のULAのみ許可します。
#acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
#acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN)
#acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
#acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
#acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
#acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src fc00::/7 # RFC 4193 local private network range
#acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
空目しがちですがaclの後ろはlocalhostではなくlocalnetです。つまりこれらはlocalnetというグループで設定されます。
で、後ろの方のhttp_access deny all
の前にhttp_access allow localnet
がコメントアウトされていますので、これを許可します。
# For example, to allow access from your local networks, you may uncomment the
# following rule (and/or add rules that match your definition of "local"):
# http_access allow localnet
# ↓
http_access allow localnet
その下にhttp_port 3128
と設定が書いてありますが、設定を変えなければ起動するとポート3128で待ち受けが始まります。
$ systemctl start squid
$ ss -na | grep 3128
tcp LISTEN 0 4096 *:3128 *:*
FirewalldでWebProxyとかProxyとかのサービスの設定がない/(^o^)\と思ったら、squidというまんまのサービス名が……
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>squid</short>
<description>Squid HTTP proxy server</description>
<port protocol="tcp" port="3128"/>
</service>
というわけでサービスにsquidを追加すればFirewallの設定は完了です。
$ firewall-cmd --permanent --add-service=squid --zone=xxxx
$ firewall-cmd --reload
MiniPC、デスクトップで動作確認しておきましょう。
$ curl --proxy http://minipc:3128 https://www.google.com
後はブラウザがWebProxyを通るように設定すれば、一部ですがIPv6化ができました。