Help us understand the problem. What is going on with this article?

OpenVPNとVPC(RouteTable)の設定だけで特定ドメインのみAlibaba CloudにルーティングさせるNW構成を作る

この記事の目的

特定のドメインやG-IP向けの通信経路だけAlibaba Cloud網を通したいときの手段として検証してみました。
VPC間にCENを通して2つのVPCをつなげたうえで試してみました。
VPN接続後、NATサーバ(ECS)を通ってアクセスするようになります。

リソース構成図とNWフロー

下図のとおりです。
image.png

手順

OpenVPN:ECSの作成

GUIコンソールから作成しました。

  • サーバー情報
機能 Hostname Zone InstanceType Spec P-IP
NATサーバ nat01 日本東京(ゾーンB) ecs.t5-lc1m1.small 1vCPU 1GiB 10.68.30.153
VPNサーバ openvpn01 日本東京(ゾーンA) ecs.t5-lc1m1.small 1vCPU 1GiB 10.68.10.238

image.png

  • セキュリティグループ(OpenVPN)
    便宜上一旦anyしてます
    image.png

  • セキュリティグループ(NATサーバ)
    便宜上一旦anyにしてます
    image.png

  • VPCのルートテーブル情報(OpenVPN)
    image.png

  • VPCのルートテーブル情報(NATサーバ)
    image.png

OpenVPN:Configure

CAは腹持ちで建てました。
ECS上のOpenVPNの構築は別の記事に起こしているので、↓のリンクをご参照ください。
https://qiita.com/tnoce/items/b5765b38aeacc8f92269

  • ポイント
    • push "route 13.112.0.0 255.252.0.0" ※qiitaのipアドレスをVPN接続したクライアントにpushする
/etc/openvpn/default.conf※コメントアウトとオプションoff項目を除く
[root@openvpn]# grep '^[^#]' 'server_r.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server_r.crt
key /etc/openvpn/easy-rsa/pki/private/server_r.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 13.112.0.0 255.252.0.0"

ECS(NATサーバ):Configure

eth0 の firewalld zone を external に変更

# firewall-cmd --zone=external --change-interface=eth0 --permanent
success

externalゾーン に IPマスカレード設定

# firewall-cmd --zone=external --add-masquerade --permanent
success

変更の反映

# firewall-cmd --reload
success

Firewalldを常に起動

# systemctl enable firewalld

Firewalldを起動

# systemctl start firewalld

Firewalldのステータスを確認(RunningになっていればOK)

# systemctl status firewalld
irewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 木 2019-11-28 08:00:13 CST; 10h ago
     Docs: man:firewalld(1)
 Main PID: 542 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─542 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

11月 28 08:00:13 nginx02 systemd[1]: Starting firewalld - dynamic firewall daemon...
11月 28 08:00:13 nginx02 systemd[1]: Started firewalld - dynamic firewall daemon.
11月 28 18:02:38 nginx02 firewalld[542]: WARNING: ALREADY_ENABLED: masquerade

検証

VPN接続

vpnuxやtunnelblickなどのGUIアプリでVPN接続します。

接続後にNW設定を確認

OpenVPNに設定しいてたクライアントサブネットが割り当てられていることを確認します。

User:~$ ifconfig | grep 10.8
        inet 10.8.0.6 --> 10.8.0.5 netmask 0xffffffff 

Qiita向けの経路が適切にpublishされているか確認します。

User:~$ netstat -rn | grep 13.112/14
13.112/14          10.8.0.5           UGSc         utun8 

特定ドメイン向けの経路を確認

image.png

これでVPN接続時はAlibaba CloudのVPC網を通ってNATサーバからQiitaにアクセスするようになりました!
注意点としてIPアドレスが複数ある場合は、丸めて記載するか単体でそれぞれ記載するなど工夫が必要です。
OpenVPNがドメインで経路をpushできれば良さそうなんですけど、今のところはできなさそう...🤔

しかし、特定IP範囲であれば、クライアントのProxy設定不要でVPN接続さえすればローカルスプリットします。
そして、特定経路だけVPCにルーティングしてくれるので、ユーザーにルーティングを意識させたくないとき有効的に使える構成だと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away