■ 目的
Object Storage はPrivate IP は無いので、インターネットでアクセスすることになりますが、HTTPSでアクセスするので暗号化されセキュアです。
今回は、あえてPrivate IPからアクセスできるようSquidのProxy Server経由でObject Strageにアクセスさせてみてみます。
■ ネットワーク構成
■ ネットワーク構成の作成
・上記構成をTerraformなど使用してちょろんと作成します
本手順は、Proxy Serverのインストールから説明します
■ Proxy Server構築
● Proxy Server用Linux インスタンス作成
Private Subnet上にCompute Instanceを作成します
● NAT Gatway作成
NAT Gatewayを設定します
yumインストールするには、Internetアクセスが必要です。
今回Private SubnetにServerを構築するため、Public IPはありません
そのため、NAT Gatway経由でsquidをインストールします
● squidインストール
# yum install squid
[root@squid-proxy opc]# yum install -y squid
・・・
インストール:
squid.x86_64 7:3.5.20-12.el7
依存性関連をインストールしました:
libecap.x86_64 0:1.0.0-1.el7
libtool-ltdl.x86_64 0:2.4.2-22.el7_3
perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
perl-DBI.x86_64 0:1.627-4.el7
perl-Data-Dumper.x86_64 0:2.145-3.el7
perl-Digest.noarch 0:1.17-245.el7
perl-Digest-MD5.x86_64 0:2.52-3.el7
perl-IO-Compress.noarch 0:2.061-2.el7
perl-Net-Daemon.noarch 0:0.48-5.el7
perl-PlRPC.noarch 0:0.2020-14.el7
squid-migration-script.x86_64 7:3.5.20-12.el7
完了しました!
インストール完了後、Internetアクセス不要であればNAT Gatewayを [Block Traffic] もしくは削除します
● squid設定
1) Proxyサーバーにアクセス可能なCIDR登録とwhitelist動作設定
viで以下情報を追加
[root@squid-proxy ~]# cp /etc/squid/squid.conf /etc/squid/squid.conf.org
[root@squid-proxy ~]# vi /etc/squid/squid.conf
# should be allowed
acl localnet src 10.0.0.0/16
acl localnet src 172.24.0.0/16
# Squid normally listens to port 3128
http_port 3128
# Wite List
acl whitelist dstdomain "/etc/squid/whitelist"
http_access allow whitelist
2) ホワイトリスト設定
必要なRegionのObject StorageURLを登録
[root@squid-proxy ~]# vi /etc/squid/whitelist
objectstorage.us-ashburn-1.oraclecloud.com
3) Squid起動
[root@squid-proxy ~]# service squid restart
[root@squid-proxy ~]# systemctl status squid.service
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2019-01-20 23:04:19 GMT; 16h ago
Process: 12721 ExecStop=/usr/sbin/squid -k shutdown -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Process: 12729 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Process: 12724 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
Main PID: 12732 (squid)
CGroup: /system.slice/squid.service
├─12732 /usr/sbin/squid -f /etc/squid/squid.conf
├─12734 (squid-1) -f /etc/squid/squid.conf
└─12735 (logfile-daemon) /var/log/squid/access.log
1月 20 23:04:19 squid-proxy systemd[1]: Starting Squid caching proxy...
1月 20 23:04:19 squid-proxy systemd[1]: Started Squid caching proxy.
1月 20 23:04:19 squid-proxy squid[12732]: Squid Parent: will start 1 kids
1月 20 23:04:19 squid-proxy squid[12732]: Squid Parent: (squid-1) process 12734 started
4) firewalld設定
Squid使用Port 3128 を通すように設定
[root@squid-proxy ~]# firewall-cmd --permanent --add-port=3128/tcp
success
[root@squid-proxy ~]# systemctl restart firewalld
■ Private Load Balancer構築
Proxy Serverの負荷分散および冗長化のため、Load Balancerを配置します
● Private Load Balancer作成
Load Balancer画面で[Create Load Balancer]ボタンをクリックし、以下情報を入力して作成
・Listener Information
- Protocol:TCP
- PORT:3128
・Backend Set Information
- IP Address: Squid Proxy ServerのPrivate IP Addressを登録
- Port:3128
・Health Check
- Protocol:TCP
- PORT:3128
● Backend Sets Health確認
Backend Setが登録されProxy Serverと疎通できていることを確認
■ 動作確認
オンプレミスのインスタンスから直接objectストレージにアクセスできることを確認します
ここでは、OCI Command Line Interface (CLI)を使用してアクセスします
● proxy設定前確認:エラー出ること確認
Private Subnetから直接接続できないことを確認
[root@test-Inst01 ~]$ oci os bucket list --query 'data[*]."name"|[0]'
Usage: oci os bucket list [OPTIONS]
Error: Unable to retrieve namespace internally. Please provide the namespace using the option "--['namespace-name']".
● proxy 環境変数設定
Proxy経由するための設定
今回は、Load Barancerを使用していますので、Load BarancerのListener IP(10.0.0.8)を設定します
[root@test-Inst01 ~]$ export https_proxy="10.0.0.8:3128"
[root@test-Inst01 ~]$ env | grep proxy
https_proxy=10.0.0.8:3128
● bucketアクセス確認
Proxy経由することでアクセスできることを確認
[root@test-Inst01 ~]$ oci os bucket list --query 'data[*]."name"|[0]'
"Proxy-Bucket"
● proxyサーバー(Squid)経由でアクセスされていることを確認
Squid LOG確認しLoad BalancerのIPからobjectstorageへアクセスされていることを確認
[root@squid-proxy squid]# tail -f /var/log/squid/access.log
1548078960.163 282 10.0.0.7 TCP_TUNNEL/200 4107 CONNECT objectstorage.us-ashburn-1.oraclecloud.com:443 - HIER_DIRECT/134.70.100.100 -
1548078960.553 273 10.0.0.7 TCP_TUNNEL/200 4540 CONNECT objectstorage.us-ashburn-1.oraclecloud.com:443 - HIER_DIRECT/134.70.100.100 -
● テストファイル転送
[root@test-Inst01 ~]$ oci os object put -bn Proxy-Bucket --file /tmp/test-file01.txt --name test-file01.txt --no-multipart
{
"etag": "A1A66A5F1E975E053024",
"last-modified": "Mon, 21 Jan 2019 15:32:47 GMT",
"opc-content-md5": "2M2Y8AsgTpgAmY=="
}
● テストファイル確認
[root@test-Inst01 ~]$ oci os object list -bn Proxy-Bucket --output table
+---------------------+-----------------+------+----------------------------------+
| md5 | name | size | time-created |
+---------------------+-----------------+------+----------------------------------+
| 2M2Y8AsgTpgAmY7Ph== | test-file01.txt | 0 | 2019-01-21T15:32:47.298000+00:00 |
+---------------------+-----------------+------+----------------------------------+
prefixes: []
■ 付録
● Load BalancerのIP確認
OCI の Private Load Balancer は透過的に Primary/Standby と Floating Private IP で構成されており、IPは自動採番され、tcpdump でも確認することができます。
Standby IP は、Backend Serversとなる Squid へ Poringしているので tcpdumpを取ることで確認できます。
[root@squid-proxy opc]# tcpdump -n -i ens3 port 3128
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
01:19:23.588100 IP 10.0.0.6.50286 > 10.0.10.11.squid: Flags [S], seq 915959842, win 26880, options [mss 8960,sackOK,TS val 2815064024 ecr 0,nop,wscale 7], length 0
01:19:23.588149 IP 10.0.10.11.squid > 10.0.0.6.50286: Flags [S.], seq 495790511, ack 915959843, win 26844, options [mss 8960,sackOK,TS val 322500794 ecr 2815064024,nop,wscale 7], length 0
01:19:23.588250 IP 10.0.0.6.50286 > 10.0.10.11.squid: Flags [.], ack 1, win 210, options [nop,nop,TS val 2815064024 ecr 322500794], length 0
01:19:23.588719 IP 10.0.0.6.50286 > 10.0.10.11.squid: Flags [F.], seq 1, ack 1, win 210, options [nop,nop,TS val 2815064024 ecr 322500794], length 0
01:19:23.588777 IP 10.0.10.11.squid > 10.0.0.6.50286: Flags [F.], seq 1, ack 2, win 210, options [nop,nop,TS val 322500795 ecr 2815064024], length 0
01:19:23.588874 IP 10.0.0.6.50286 > 10.0.10.11.squid: Flags [.], ack 2, win 210, options [nop,nop,TS val 2815064024 ecr 322500795], length 0
01:19:25.019310 IP 10.0.0.7.50304 > 10.0.10.11.squid: Flags [S], seq 2132021857, win 26880, options [mss 8960,sackOK,TS val 2733706381 ecr 0,nop,wscale 7], length 0
01:19:25.019349 IP 10.0.10.11.squid > 10.0.0.7.50304: Flags [S.], seq 117296909, ack 2132021858, win 26844, options [mss 8960,sackOK,TS val 1898647448 ecr 2733706381,nop,wscale 7], length 0
01:19:25.019444 IP 10.0.0.7.50304 > 10.0.10.11.squid: Flags [.], ack 1, win 210, options [nop,nop,TS val 2733706382 ecr 1898647448], length 0
01:19:25.020022 IP 10.0.0.7.50304 > 10.0.10.11.squid: Flags [F.], seq 1, ack 1, win 210, options [nop,nop,TS val 2733706382 ecr 1898647448], length 0
01:19:25.020099 IP 10.0.10.11.squid > 10.0.0.7.50304: Flags [F.], seq 1, ack 2, win 210, options [nop,nop,TS val 1898647449 ecr 2733706382], length 0
01:19:25.020189 IP 10.0.0.7.50304 > 10.0.10.11.squid: Flags [.], ack 2, win 210, options [nop,nop,TS val 2733706382 ecr 1898647449], length 0
上記実行結果により、以下がLBのIPとなります
・Floating IP:10.0.0.8 (OCIコンソールから確認できるIP)
・Primary IP :10.0.0.7 (ClientからSquidにアクセスした/var/log/squid/access.logから確認できたIP)
・Standby IP :10.0.0.6 (Squidにポーリングしたtcpdumpから確認できたIP)