Edited at

Oracle Cloud:オンプレミスからVPN経由でObject Storageにアクセスさせてみてみた


■目的

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設定

① 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

②ホワイトリスト設定

必要なRegionのObject StorageURLを登録

[root@squid-proxy ~]# vi /etc/squid/whitelist

objectstorage.us-ashburn-1.oraclecloud.com

③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

④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のLoad Balancer(LB)は透過的にActive/Standbyで構成されており、IPは自動採番されます

 LBから、Backend ServersとなるSquidへのPoringしているので

 その自動採番されたActive/StandbyそれぞれのIPは、Squidサーバーで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となります

 VIP:10.0.0.8 (OCIコンソールから確認できるIP)

 Active:10.0.0.7 (ClientからSquidにアクセスしたLOGから確認できたIP)

 Standby:10.0.0.6 (tcpdumpから確認できたIP)