#author("2025-11-03T04:49:33+00:00","default:sysosa","sysosa")
#author("2025-11-03T05:54:42+00:00","default:sysosa","sysosa")
プロキシサーバを作ってみる

流れ的には rockylinux9 に2本のnicを繋げて片方はインターネットに繋がって、もう片方は内部LANに繋がる。
だけど、
-firewalldによるマスカレードははし
-/proc/sys/net/ipv4/ip_forwardの値は「0」

として代わりに
-squidを入れて
-chronyも有効にする

とします。
本家 squid様 [[https://www.squid-cache.org/>+https://www.squid-cache.org/]]

***構築 [#a43755cf]
インターネット側のnicにはGWとNSを設定して 192.168.0.86/24 が割り当て、もう片方の内部の方は 10.10.0.1/24 のみ割り当てる.

#code(nonumber){{
[root@bridge-router ~]# cat /etc/redhat-release
Rocky Linux release 9.6 (Blue Onyx)

[root@bridge-router ~]# systemctl disable firewalld
[root@bridge-router ~]# systemctl stop firewalld

[root@bridge-router ~]# reboot

[root@bridge-router ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp6s18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:24:11:ac:33:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.86/24 brd 192.168.0.255 scope global dynamic noprefixroute enp6s18
       valid_lft 43195sec preferred_lft 43195sec
    inet6 fe80::be24:11ff:feac:339b/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: enp6s19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:24:11:d3:ec:86 brd ff:ff:ff:ff:ff:ff
    inet 10.10.0.1/24 brd 10.10.0.255 scope global noprefixroute enp6s19
       valid_lft forever preferred_lft forever

[root@bridge-router ~]# ip route
default via 192.168.0.1 dev enp6s18 proto dhcp src 192.168.0.86 metric 100
10.10.0.0/24 dev enp6s19 proto kernel scope link src 10.10.0.1 metric 101
192.168.0.0/24 dev enp6s18 proto kernel scope link src 192.168.0.86 metric 100

[root@bridge-router ~]# systemctl status firewalld
○ firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)
     Active: inactive (dead)
       Docs: man:firewalld(1)

[root@bridge-router ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@bridge-router ~]#
}}

そしてsquidを入れます
#code(nonumber){{
[root@bridge-router ~]# dnf install squid
[root@bridge-router ~]# systemctl enable squid --now

(chronyの設定)
[root@bridge-router ~]# vi /etc/chrony.conf
server c.sybyl.local iburst
allow 10.10.0.0/24

[root@bridge-router ~]# systemctl enable chronyd --now
}}

squidの設定はあまり弄らずそのままを使ってます。なので、proxy先はこのマシンの3128ポートになります

***クライアント [#v19b8a39]
内側のマシンの話.
「10.10.0.2/24」なマシンで GW は付けない
#code(nonumber){{
[root@r9 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp6s18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:24:11:bf:25:df brd ff:ff:ff:ff:ff:ff
    inet 10.10.0.2/24 brd 10.10.0.255 scope global noprefixroute enp6s18
       valid_lft forever preferred_lft forever
[root@r9 ~]# ip route
10.10.0.0/24 dev enp6s18 proto kernel scope link src 10.10.0.2 metric 100
[root@r9 ~]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 10.10.0.1                     3   6   377    59  +4601ns[  +15us] +/- 3480us
[root@r9 ~]# cat /etc/yum.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False

proxy=http://10.10.0.1:3128
[root@r9 ~]#
}}

***windows11をプロキシサーバにしてみる [#dbab94db]
本家様の[[https://wiki.squid-cache.org/KnowledgeBase/Windows>+https://wiki.squid-cache.org/KnowledgeBase/Windows]]を参照すると [[https://squid.diladele.com/>+https://squid.diladele.com/]] から得られるみたい
得られたインストーラーは「squid.msi」(16.6MB)
これを起動してインストールを進めます
&ref(2025y11m03d_021300299.png,nolink,80%); &ref(2025y11m03d_021304873.png,nolink,80%); &ref(2025y11m03d_021309520.png,nolink,80%); &ref(2025y11m03d_021312704.png,nolink,80%); &ref(2025y11m03d_021322904.png,nolink,80%); &ref(2025y11m03d_021333593.png,nolink,80%);

インストールが完了するとどうやら稼働しているようで
タスクマネージャの「サービス」に登録されている
&ref(2025y11m03d_021451913.png,nolink);
設定らはインジケーターにあるアイコンで項目が選べて
&ref(2025y11m03d_022410958.png,nolink);
初期設定は下記のようになってます
#code(nonumber){{
#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed

acl localnet src 10.0.0.0/8	# RFC1918 possible internal network
acl localnet src 172.16.0.0/12	# RFC1918 possible internal network
acl localnet src 192.168.0.0/16	# RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# Uncomment the line below to enable disk caching - path format is /cygdrive/<full path to cache folder>, i.e.
#cache_dir aufs /cygdrive/d/squid/cache 3000 16 256        <--- squidのキャッシュ機能. 「/cygdrive/d」はD:ドライブを意図するみたい


# Leave coredumps in the first cache dir
coredump_dir /var/cache/squid

# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|\?) 0	0%	0
refresh_pattern .		0	20%	4320

dns_nameservers 8.8.8.8 208.67.222.222                     <--- squidサーバ自身が参照するDNS, 指定しないと squidサーバの /etc/resolv.conf が使われる.

max_filedescriptors 3200
}}

変更箇所としては「dns_nameservers」位でしょうか。
値を修正したらsquidのメニューにある「Stop Squid Service」->「Start Squid Service」で反映.

***windows11をプロキシサーバにしてみる - 時計サーバ [#mf46bb4f]

windowsには時計合わせとして w32time が入っている. これをサーバとして稼働させる.
まずは現状確認. [スタート]を右クリックして「ターミナル(管理者)」を立ち上げて、「w32tm /query /status」と実行してみる
#code(nonumber){{
PS C:\Users\supervisor> w32tm /query /status

閏インジケーター: 3 (同期未実行)
階層: 0 (未指定)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0000000s
ルート分散: 0.0000000s
参照 ID: 0x00000000 (未指定)
最終正常同期時刻: 未指定
ソース: Local CMOS Clock
ポーリング間隔: 10 (1024s)

PS C:\Users\supervisor>
}}
windowsPCの内部時計に依存して時計合わせを行っている模様. これを外部の時計サーバを参照して時計合わせするようにします.
使用するコマンドは「w32tm /config /manualpeerlist:"192.168.0.3" /syncfromflags:manual /update」
その後に「w32tm /resync」を実施します

#code(nonumber){{
PS C:\Users\supervisor> w32tm /config /manualpeerlist:"192.168.0.3" /syncfromflags:manual /update
コマンドは正しく完了しました。

PS C:\Users\supervisor> w32tm /resync
再同期コマンドをローカル コンピューターに送信しています
コマンドは正しく完了しました。

(確認)
PS C:\Users\supervisor> w32tm /query /status
閏インジケーター: 0 (警告なし)
階層: 3 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0061856s
ルート分散: 7.7825708s
参照 ID: 0xC0A80003 (ソース IP:  192.168.0.3)
最終正常同期時刻: 2025/11/03 13:19:36
ソース: 192.168.0.3
ポーリング間隔: 10 (1024s)

PS C:\Users\supervisor>
}}
これで外部のntpサーバを利用できる形になりました. 次に windowsPC がntpサーバとして動くようにします.
レジストリエディタ「regedit」を起動させ、「コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer」に行き
そこにある名前「Enabled」を「0」から「1」にします
&ref(2025y11m03d_133224257.png,nolink);  &ref(2025y11m03d_133439505.png,nolink);
ターミナルからは「reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer /v Enabled /t REG_DWORD /d 1 /f」と実行すれば同じことになります.

次に「コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config」に行き
そこにある「AnnounceFlags」を「10」から「5」にします
&ref(2025y11m03d_133812552.png,nolink); &ref(2025y11m03d_134053494.png,nolink);
ターミナルからは「reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config /v AnnounceFlags /t REG_DWORD /d 5 /f」と実行すれば同じことになります.

あとは w32time を再起動します。コマンドラインから
#code(nonumber){{
net stop w32time
net start w32time
}}
これでwindowsPCがntpサーバになります.

最後にサービスを提供するので相手からの受信を許容するように windows ファイアウォール を修正します。
GUIでの操作もできますが、面倒なのでコマンドラインで下記を実行してください。これで完了となります
「netsh advfirewall firewall add rule name="NTP Server" dir=in action=allow protocol=UDP localport=123」

っで実際内部のlinuxマシンからは
#code(nonumber){{
[root@r9 ~]# cat /etc/chrony.conf
server 10.10.0.1 iburst
[root@r9 ~]#
}}
で繋げたけど、10min位でconnectionが叶いました. より高性能なwindows向け ntp サーバを作るなら「Meinberg NTP for Windows」[[https://www.meinbergglobal.com/english/sw/ntp.htm>+https://www.meinbergglobal.com/english/sw/ntp.htm]] とかがいいみたい.
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS