さくらのクラウドでSquidプロキシを使いローカルIPのみのサーバーから外部通信する方法

コンピューティング # サーバー運用

こんにちは、UOZUです!

今回は、さくらのクラウドでローカルIPのみを持つサーバーからの外部通信を簡単にしてみようと思います。

前提の構成は以前と同様に以下の通りです。

また検証はAlmaLinux release 10.2で実施しています。

通常はローカルIP宛のみ通信可能

構成上当然ですが、現在はローカルIP同士でしか通信ができない為、dnfコマンドからのパッケージ操作も利用できなくなっています。

[uozu@db ~]$ ping -c 3 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.195 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.241 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.248 ms

--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2067ms
rtt min/avg/max/mdev = 0.195/0.228/0.248/0.023 ms

[uozu@db ~]$ ping -c 3 8.8.8.8
ping: connect: Network is unreachable

[uozu@db ~]$ sudo dnf update
AlmaLinux 10 - AppStream                                                                0.0  B/s |   0  B     00:00
Errors during downloading metadata for repository 'appstream':
  - Curl error (6): Could not resolve hostname for https://mirrors.almalinux.org/mirrorlist/10/appstream [Could not resolve host: mirrors.almalinux.org]
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Curl error (6): Could not resolve hostname for https://mirrors.almalinux.org/mirrorlist/10/appstream [Could not resolve host: mirrors.almalinux.org]

[uozu@db ~]$ curl google.com
curl: (6) Could not resolve host: google.com

VPNルーターなどの追加でローカルIPとグローバルIPのNATも可能ですが、この構成を変えず、このサーバーから特定の作業のみ、踏み台サーバーを経由して、必要な通信だけ外部へ出せるようにしてみます。

踏み台サーバにSquidの導入と初期設定

踏み台サーバ側にSquidを導入し、ローカルIPの範囲(192.168.1.0/24)のみアクセス可能とします。

[uozu@web ~]$ sudo dnf install squid -y
Last metadata expiration check: 2:20:39 ago on Sun 16 Aug 2026 03:47:26 PM JST.
Dependencies resolved.
========================================================================================================================
 Package                      Architecture           Version                            Repository                 Size
========================================================================================================================
Installing:
 squid                        x86_64                 7:6.10-12.el10_2.1                 appstream                 3.5 M
Installing dependencies:
 libecap                      x86_64                 1.0.1-19.el10                      appstream                  26 k
 perl-English                 noarch                 1.11-512.2.el10_0                  appstream                  13 k

Transaction Summary
========================================================================================================================
Install  3 Packages

Total download size: 3.5 M
Installed size: 11 M
Downloading Packages:

~省略

Installed:
  libecap-1.0.1-19.el10.x86_64       perl-English-1.11-512.2.el10_0.noarch       squid-7:6.10-12.el10_2.1.x86_64

Complete!

Squidを公開状態にすると、意図しない第三者にプロキシとして利用される可能性があります。実運用では、acl による接続元制限に加えて、パケットフィルターやOS側のファイアウォールでも、ローカルネットワークからの接続だけを許可するようにしてください。

また、acl localnet で許可する接続元ネットワークを指定し、http_access allow localnet でそのネットワークからのプロキシ利用を許可します。

[uozu@web ~]$ sudo less /etc/squid/squid.conf
--
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
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
--
# http_access allow localnet
--

[uozu@web ~]$ sudo vi /etc/squid/squid.conf
--
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
#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.1.0/24         # 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
--
http_access allow localhost
--

[uozu@web ~]$ sudo systemctl enable --now squid

[root@web ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      723/sshd: /usr/sbin
tcp6       0      0 :::3128                 :::*                    LISTEN      5737/(squid-1)
tcp6       0      0 :::22                   :::*                    LISTEN      723/sshd: /usr/sbin
tcp6       0      0 :::80                   :::*                    LISTEN      744/httpd
tcp6       0      0 :::443                  :::*                    LISTEN      744/httpd

これでローカルIPサーバーからProxyが利用できるようになります。

ローカルIPサーバー側からの利用方法と設定方法

curlなら -x で踏み台サーバとポートを指定してProxyが利用できます。

[uozu@db ~]$ curl google.com -x http://192.168.1.1:3128
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

もしcurlでProxyの利用を永続化したいなら、.curlrcの作成で設定できます。

[uozu@db ~]$ vi .curlrc
[uozu@db ~]$ cat .curlrc
proxy=http://192.168.1.1:3128

[uozu@db ~]$ curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

dnfなら --setopt=proxy で指定が可能です。こちらも永続化したい際は、/etc/dnf/dnf.conf にproxyオプションで指定可能です。

[uozu@db ~]$ sudo dnf update --setopt=proxy=http://192.168.1.1:3128
determining the fastest mirror (10 hosts).. done.                                     ] ---  B/s |   0  B     --:-- ETA
AlmaLinux 10 - AppStream                                                                1.8 MB/s | 2.4 MB     00:01
AlmaLinux 10 - BaseOS                                                                    19 MB/s |  29 MB     00:01
AlmaLinux 10 - CRB                                                                      601 kB/s | 566 kB     00:00
AlmaLinux 10 - Extras                                                                    11 kB/s | 7.3 kB     00:00
determining the fastest mirror (39 hosts).. done.                           ===       ] ---  B/s |   0  B     --:-- ETA
Extra Packages for Enterprise Linux 10 - x86_64                                         1.9 MB/s | 6.6 MB     00:03
Dependencies resolved.
========================================================================================================================
 Package                                 Architecture     Version                             Repository           Size
========================================================================================================================
Installing:
 kernel                                  x86_64           6.12.0-211.47.1.el10_2              baseos              1.6 M
Upgrading:
 NetworkManager                          x86_64           1:1.56.0-2.el10_2                   baseos              2.2 M
 NetworkManager-libnm                    x86_64           1:1.56.0-2.el10_2                   baseos              1.9 M
 NetworkManager-tui                      x86_64           1:1.56.0-2.el10_2                   baseos              232 k
 amd-gpu-firmware                        noarch           20260707-23.1.el10_2                appstream            29 M
 amd-ucode-firmware                      noarch           20260707-23.1.el10_2                baseos              701 k
 atheros-firmware                        noarch           20260707-23.1.el10_2                baseos               47 M

~省略
[uozu@db ~]$ sudo vi /etc/dnf/dnf.conf
--
proxy=http://192.168.1.1:3128
--

最後に

今回は、さくらのクラウドでローカルIPのみを持つサーバーから、踏み台サーバー上のSquidを経由して外部通信する方法を試してみました。

ローカルIPのみのサーバーでは、そのままでは外部IPへの通信や名前解決ができず、curldnf も利用できない場合があります。Squidを踏み台サーバー側に用意しておくことで、必要なコマンドだけプロキシ経由で外部へ通信させることができます。

ローカルIPのみのサーバーで、構成を大きく変えずに一時的なパッケージ取得や外部アクセスを行いたい場合は、Squidプロキシを活用してみてはいかがでしょうか。

最後までお読みいただき、ありがとうございます!

この記事を書いた人

UOZU

ネットアシスト運用チーム10年目の運用エンジニア

さくらのクラウド検定 ベーシック

さくらのクラウド検定 アドバンスド

AWS Certified Solutions Architect - Associate