夏休みも終わりに近づいて参りました。

みなさん 自由研究は、進んでいますか。

是非、お薦めしたいのが、OCIと自宅をVPNで接続する自由研究等いかがでしょうか。

ということで、前回は、ER-Xで構築したVPNですが、ER-Xも、入手困難となってしまいました。

これは、やばいということで、汎用的なPCで、構築するノウハウを得ておこうと思い、研究しておきました。

で、使用する機材は、Raspberry PI 4 Model B となります。

※この前、手に入れたLuckfox pico MAXで試したのですが、Kernelが対応していないようで面倒だから断念しました。

使用するOSは、OCIということで、OracleLinux 8.10 となります。

※9.4を試したのですが、ネットワークがストールして使い物にならなかったです。

VPNを張っておけば、OCIのグローバルIPと自分家のサーバーとかを連携出来ますしね。

早速、行ってみよう

今回は、静的ルーティングで実装します。

BGPは、研究中...


1.

OCIで、サイト間VPNを作成する。

これは、VCN作ったり、サブネット作ったり、色々としてから、DRGを作成してアタッチすることになります。

この辺りは、頑張って構築しておいて下さい。

後、顧客構内機器(CPE)を作っておいて下さい。

顧客構内機器とは、自分のとこのルーターのグローバルIPのことです。

CPEベンダーは、Libreswan でも選択しといて下さい。

※前提としてグローバルIPを取得しており、UDP 4500,500 を、OracleLinuxにポートマップしておいて下さい。NAT前提です。

 

2.

ネットワーキングメニュー - 顧客接続性から、サイト間VPNを選択します。

IPSec接続の作成 を押下します。

静的ルーティングを選択します。

オンプレミス・ネットワークへのルート:192.168.0.0/24

トンネルは、冗長性を考慮して2つ作ることが義務となっています。

トンネル1

IKE:Version2

IPv4トンネル内インタフェース - CPE:10.99.96.1/30

IPV4トンネル内インタフェース - Oracle:10.99.96.2/30

トンネル2

IKE:Version2

IPv4トンネル内インタフェース - CPE:10.99.97.1/30

IPV4トンネル内インタフェース - Oracle:10.99.97.2/30

作成完了すると、各トンネルの共有シークレットが発行されるので、これを記録しておきましょう。

それと、各トンネルのエンドポイントIPv4アドレス(Oracle VPN Public IP)を記録しましょうね。

前回、NATルーター内なので、識別子の変更が必要だったのですが、今回は、不要です。

 

3.

OracleLinux を 整えましょう。

取説は、ここ

RaspberryPI4に適当にインストール(ダウンロードして、ラズパイイメージャでMicroSDに焼く)して起動しておいて下さい。

初期ユーザー:root

パスワード:oracle

 

SDカード容量を最大限に生かす

growpart /dev/mmcblk0 3 
btrfs filesystem resize max /

 

適当に、vimとtarとsudoぐらいをインストールしておいて下さい。※vscode使いの人は、tar入れないとダメですよ

dnf install vim tar sudo

固定IPにしないと面倒ですから、固定IPにしておきましょう。

GUIが無いから出来ないとか言わないように

CUIでも、良い感じのインターフェースがあります。

nmtui コマンドを実行してみて下さい。

日本語環境がほしいですか。

dnf install glibc-langpack-ja
localectl set-locale LANG=ja_JP.utf8 
localectl set-keymap jp106

timedatectl set-timezone Asia/Tokyo

.bashrcの最後に LANG=ja_JP.utf8 を追加して下さいね。

これで、実用的な環境になりましたが、SELinuxなんて いらねー なんて方は、無効化しましょう

※VPN接続時のスクリプト実行を妨げるので、無効化しました。

grubby --update-kernel ALL --args selinux=0

 

最後に、sysctlの修正です。これを追記して下さい。

/etc/sysctl.d/50-libreswan.conf

net.ipv4.ip_forward = 1

net.ipv4.conf.all.rp_filter = 0

 

最後に再起動で

reboot

 

4.

IPSecを使って VPN を構築するのですが、使用するパッケージは、libreswanです。

なので、必要なパッケージをぶっこみます。

dnf install libreswan iptables

 

こっからは、LibreSwanの定義ファイル作成ですよ。

自分のグローバルIP130.50.26.127 としておきます。

オンプレ側のOracleLinuxのIPを 192.168.0.2 としておきます。

OCI側へのルート先(VCN)は、10.8.0.0/16 としておきます。

/etc/ipsec.d/oci-ipsec.conf

conn oracle-tunnel-1
     left=192.168.0.2
     leftid=130.50.26.127
     right=168.130.51.125 # OCI VPN Public IP 1
     authby=secret
     leftsubnet=192.168.0.0/24
     rightsubnet=10.8.0.0/16
     auto=start
     dpdaction=restart
     dpddelay=30
     dpdtimeout=120
     pfs=yes
     mark=5/0xffffffff
     vti-interface=vti1
     vti-routing=yes
     ikev2=insist
     ike=aes_cbc256-sha2_384;modp1536
     phase2alg=aes_gcm256;modp1536
     encapsulation=yes
     ikelifetime=28800s
     salifetime=3600s
     leftupdown=/etc/ipsec.d/oci-updown.sh
conn oracle-tunnel-2
     left=192.168.0.2
     leftid=130.50.26.127
     right=168.132.142.25 # OCI VPN Public IP 2
     authby=secret
     leftsubnet=192.168.0.0/24
     rightsubnet=10.8.0.0/16
     auto=start
     dpdaction=restart
     dpddelay=30
     dpdtimeout=120
     pfs=yes
     mark=6/0xffffffff
     vti-interface=vti2
     vti-routing=yes
     ikev2=insist
     ike=aes_cbc256-sha2_384;modp1536
     phase2alg=aes_gcm256;modp1536
     encapsulation=yes
     ikelifetime=28800s
     salifetime=3600s
     leftupdown=/etc/ipsec.d/oci-updown.sh

 

PSK共有シークレット定義

各トンネルの謎の秘密の暗号文字列を張り付けます。

/etc/ipsec.d/oci-ipsec.secrets

130.50.26.127 168.130.51.125: PSK "ii3UuTgLEghogeN1xCy64HuzvcUhogeTXSOSFxPJhogeXm5pDEcehogeOyuuukkG"
130.50.26.127 168.132.142.25: PSK "hogebd6VoraclUkXAhogedJQvEzone4KBK1234FENWsCuukkRseCpowerD5keZZ"

 

パーミッションを修正しなとダメ

chmod 600 /etc/ipsec.d/oci-ipsec.conf

chmod 600 /etc/ipsec.d/oci-ipsec.secrets

 

VPNルートスクリプトをカスタムしないとダメ

cp /usr/libexec/ipsec/_updown.xfrm /etc/ipsec.d/oci-updown.sh

 

/etc/ipsec.d/oci-updown.sh を修正する

~~

 

addvti() {
    if [ -n "${VTI_IFACE}" ]; then
        if [ -z "${CONNMARK_IN}" -o -z "${CONNMARK_OUT}" ]; then
            echo "vti-interface option ignored because no mark was configured"
        else
            if [ "${VTI_ROUTING}" = yes ]; then
                # Tuomo should improve this with using ${PLUTO_MY_CLIENT_NET}
                # echo "setting up vti routing"
                r=add
                ip route list | grep -q "${PLUTO_PEER_CLIENT%/*}" && r=change
                if [ "${r}" = change ]; then
                    # resolve LAN conflict by forcing host route for default gw
                    gw="$(ip ro li | grep ^default | awk '{ print $3;}')"
                    gwdev="$(ip ro li | grep ^default | awk '{ print $5;}')"
                    # echo "ip route add ${gw} dev ${gwdev}"
                    ip route add ${gw} dev ${gwdev} >/dev/null ||:
                fi
                srcip=""
                if [ -n "${PLUTO_MY_SOURCEIP}" ]; then
                    srcip=" src ${PLUTO_MY_SOURCEIP}"
                fi
                # echo "ip route ${r} ${PLUTO_PEER_CLIENT} dev ${VTI_IFACE} ${srcip}"
                #ip route ${r} ${PLUTO_PEER_CLIENT} dev ${VTI_IFACE} ${srcip}
                #決め打ちだ
                if [ "${r}" = change ]; then
                    ip route change ${PLUTO_PEER_CLIENT} mtu 1500 nexthop dev vti1 nexthop dev vti2 ${srcip}
                else
                    ip route ${r} ${PLUTO_PEER_CLIENT} mtu 1500 dev ${VTI_IFACE} ${srcip}
                fi
                echo "done ip route"
            fi
        fi
    fi
}

~~

※決め打ちのとこの PLUTO_PEER_CLIENT ですが、もっといっぱい指定したい場合、複数行ベタ書きで良いかと思います。その場合、delvti関数の ip route del も複数行にしないとダメでしょうね。

※MTUですが、調整したい場合、confに記載せずに、スクリプトに埋め込んでしまって下さい。

 

5.

いよいよ、準備が出来ました。

テイクオフです

の前に確認です。

ipsec verify

Checking that pluto is running だけ、FAILED してるかと思います。

 

ipsecの起動設定

systemctl enable ipsec
systemctl restart ipsec

 

動作確認

ipsec status

こんな感じの出力があったら OK です。

000 Total IPsec connections: loaded 2, active 2

 

何か問題があっから以下のコマンドで確認してみましょう

ipsec addconn --autoall

 

ルートの確認

ip route

 

開始

ipsec start

 

停止

ipsec stop

 

気になる速度は、

Up   9.5Mbytes/s 76Mぐらい
Down  18Mbytes/s  144Mぐらい

 

Joomla templates by a4joomla