Proxy経由でSUSEのリポジトリにアクセス

# はじめに
色々な理由でサーバが直接インターネット接続する事を拒否している環境では
Proxyサーバ経由でインターネット接続するような構成をとる事があります。
先日、そのような環境でSUSEのリポジトリにアクセスするのに苦戦しましたので実施したことを残しておきたいと思います。

# 検証した環境
Azureの東日本リージョンにProxyサーバ（REHL8 + Squid）とクライアントのSLESのVMを配置。
Proxyサーバからは直接インターネットに出られるようにしています。

![configurationdiagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/041045c0-2231-a7d3-2839-d9c12a588517.png)

# Proxyサーバの設定
Proxyサーバ側で名前解決が出来る必要があるため、東日本リージョンのSMTサーバを一つ選択してhostsに追加します。
DNSサーバに追加でも大丈夫です…多分。
Azure用のSMTサーバのIPアドレスは[こちら](https://susepubliccloudinfo.suse.com/v1/microsoft/servers.json)から取得出来ます。

```bash:hosts
52.185.185.83   smt-azure.susecloud.net smt-azure
```

squidにhostsのエントリを利用するように設定します。

```bash:/etc/squid/squid.conf
hosts_file /etc/hosts
```

設定後squidを再起動します。

```bash
systemctl restart squid.service
```

# SLES（クライアント）の設定
proxyの設定をします。
再起動後もProxyを使用するように`/etc/sysconfig/proxy`を編集します。

```bash:/etc/sysconfig/proxy
# 値を以下のように修正します。
PROXY_ENABLED="yes"
HTTP_PROXY="http://<Proxyサーバ>:<ポート>"
HTTPS_PROXY="http://<Proxyサーバ>:<ポート>"
```

hostsのIPアドレスをProxyサーバに合わせます。

```bash:hosts
# Added by SMT registration do not remove, retain comment as well
52.185.185.83   smt-azure.susecloud.net smt-azure
```

SLESのVirtual Machineデプロイ時にインターネット接続が出来ない場合はhostsにSMTサーバのエントリが入っていません。
その場合はhostsに手動で追加せず、リポジトリ情報をクリアして再登録を行います。

```bash
SUSEConnect --cleanup
rm -f /etc/SUSEConnect
rm -rf /etc/zypp/credentials.d/*
rm -rf /etc/zypp/repos.d/*
rm -f /etc/zypp/services.d/*
rm /var/lib/cloudregister/*
rm -rf /var/cache/zypp/*
registercloudguest --force-new
```

上記コマンド実行後、hostsにSMTサーバのエントリが登録されていることを確認出来ます。
もしProxyサーバのhosts内のIPアドレスと違う場合は合わせてください。
キャッシュ等の影響で違うIPアドレスが入ることがあります。

```bash:SLESのhosts
# Added by SMT registration do not remove, retain comment as well
52.185.185.83   smt-azure.susecloud.net smt-azure
```

zypperでリポジトリにアクセス出来ることを確認しました。

```bash
tamura-vm-sles:~ # zypper refresh
Repository 'SLE-Module-Basesystem15-SP3-Pool' is up to date.             
Repository 'SLE-Module-Basesystem15-SP3-Updates' is up to date.          
Repository 'SLE-Module-Containers15-SP3-Pool' is up to date.             
Repository 'SLE-Module-Containers15-SP3-Updates' is up to date.          
Repository 'SLE-Module-Desktop-Applications15-SP3-Pool' is up to date.   
Repository 'SLE-Module-Desktop-Applications15-SP3-Updates' is up to date.
Repository 'SLE-Module-DevTools15-SP3-Pool' is up to date.               
Repository 'SLE-Module-DevTools15-SP3-Updates' is up to date.            
Repository 'SLE-Module-Legacy15-SP3-Pool' is up to date.                 
Repository 'SLE-Module-Legacy15-SP3-Updates' is up to date.              
Repository 'SLE-Module-Public-Cloud15-SP3-Pool' is up to date.           
Repository 'SLE-Module-Public-Cloud15-SP3-Updates' is up to date.        
Repository 'SLE-Module-Python2-15-SP3-Pool' is up to date.               
Repository 'SLE-Module-Python2-15-SP3-Updates' is up to date.            
Repository 'SLE-Module-CAP-Tools15-SP3-Pool' is up to date.              
Repository 'SLE-Module-CAP-Tools15-SP3-Updates' is up to date.           
Repository 'SLE-Product-SLES15-SP3-Pool' is up to date.                  
Repository 'SLE-Product-SLES15-SP3-Updates' is up to date.               
Repository 'SLE-Module-Server-Applications15-SP3-Pool' is up to date.    
Repository 'SLE-Module-Server-Applications15-SP3-Updates' is up to date. 
Repository 'SLE-Module-Web-Scripting15-SP3-Pool' is up to date.          
Repository 'SLE-Module-Web-Scripting15-SP3-Updates' is up to date.       
All repositories have been refreshed.
```

# 最後に
今回はAzure上のSLESで実行しましたがAWSやGoogle Cloudにおいても同じ設定で接続可能だと思います。
ただし、SMTサーバのIPアドレスは各クラウドで用意されているので注意してください。
[AWS用SMTサーバ一覧](https://susepubliccloudinfo.suse.com/v1/amazon/servers.json)
[Google Cloud用SMTサーバ一覧](https://susepubliccloudinfo.suse.com/v1/google/servers.json)

# 参考
https://www.suse.com/c/accessing-the-public-cloud-update-infrastructure-via-a-proxy/