0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MiniPCを中継器に

Last updated at Posted at 2025-04-01

自室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にしてますが、特に問題は起きませんでした。

マスカレードの設定はネットを見るとなんか色々書いてるんですが……

  1. net.ipv4.ip_forward1にする
  2. インターフェイス(両方)の所属するzoneのmasqueradeyesにする

だけでした。

net.ipv4.ip_forwardはfirewalldのmasqueradeがyesの状態だと自動で1になるとか見ましたが、手動で1にしないと上手く動きませんでした

net.ipv4.ip_forwardの設定

カーネルのネットワークパケット転送許可フラグを立てます。

コメントだけのファイルがあるので下の方に追記します

/etc/sysctl.conf
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のアドレスにする必要がありますね。

image.png

これだけでネットワーク境界をまたいでpingが通るようになります

デスクトップ
> ping 192.168.11.1
(応答)

Firewalld(nftables?)の設定だけでiptablesを使っていないので、iptablesへは何も設定されない状態でフィニッシュです。

MiniPC
$ 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)を通るように設定します。

image.png

デスクトップ側はマスカレードの時に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の設定は必須です

/etc/sysctl.conf
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というまんまのサービス名が……

/usr/lib/firewalld/services/squid.xml
<?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化ができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?