AWS side to side VPN建置實作
在完成Public Subnet與Private Subnet後,開始規劃IPSec VPN與公司內部資源建立安全性連線,基本上有兩種方式:
- Hardware VPN-使用VPC提供之Hardware VPN服務與客戶端之Hardware VPN Device(如Cisco、Juniper Router等)建立連線,但除了廠牌限制外、韌體上也有限制,設定參數太過複雜,以至於難度較高,最重要的是需要額外收費。
- Software VPN-使用VPN軟體建立Side to Side VPN,除了設定上較容易外,也沒額外費用產生,此篇採用openswan來實作,架構圖如下所示。
- AWS與公司環境基本上都是採WAN Router 直接NAT外部IP對應到內部,所以兩邊伺服器的網路介面都只需要一個,如果您是採用一張網卡接外部IP,一張網卡接內部IP,此篇的設定方式則需要做一些調整(不另外說明)。
- 另外因安全性問題,EIP部分已遮蓋。
AWS Side VPN SERvER建置
- 請先於Public subnet建立一台redhat 7之Instance,並將Security Group中Inbound加入下圖規則,除了IPSec所需500、4500 port外,並允許雙方LAN網段所有流量通過。
- SSH至AWS SIDE VPN SERVER,使用ec2-user登入後,請修改root密碼並切換至root。
- 關閉SELINUX並安裝openswan且設為開機自動啟動
# yum install wget bind-utils openswan lsof
# chkconfig ipsec on
- 關閉RHEL 7 之Firewalld並安裝使用iptables。(因RHEL 7使用Firewalld取代iptables,但因習慣問題這邊還是使用iptables)
- 關閉並停止firewalld
# systemctl mask firewalld
# systemctl stop firewalld
- 安裝 iptables
# yum install iptables-services
- 啟動及設定開機執行 iptables
# systemctl enable iptables
# systemctl start iptables
- 編輯sysctl.conf,加入以下參數。
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
- 編輯iptables,加入以下NAT規則。
- 建立IPSec設定檔與sharekey。
- 建立sharekey
- 輸入兩邊的Public IP 與 PSK code,PSK code請隨意輸入超過20 byte之字元即可,兩邊需相同。
EIP1 EIP2: PSK "1qaz2wsx3edc4rfv5tgb6yhn"
- 修改ipsec.conf,並確認為以下參數內容。
- 到目前為止,AWS Side 之VPN設定已完成。
- 請於公司內部網段建立一台Cent OS Server並關閉SELINUX,之後安裝openswan且設為開機自動啟動
# yum install wget bind-utils openswan lsof
# chkconfig ipsec on
- 編輯sysctl.conf,加入以下參數。
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
- 編輯iptables,加入以下NAT規則。
- 建立IPSec設定檔與sharekey。
- 建立conf,參數如下:
- 建立sharekey
- Public IP 與 PSK code,PSK code請隨意輸入超過20 byte之字元即可,兩邊需相同。
EIP2 EIP1: PSK "1qaz2wsx3edc4rfv5tgb6yhn"
- 修改ipsec.conf,並確認為以下參數內容。
- 到目前為止,LOCAL Side 之VPN設定已完成。
測試連線
- 請兩邊將ipsec服務重新啟動
service ipsec restart
- 於Local side確認tunnel是否有起來
service ipsec status
- 兩邊互ping測試。
-AWS side VPN Server ping local VPN Server Lan端IP(172.30.8.6)成功
-Local side VPN Server ping AWS VPN Server public subnet端IP(10.0.0.4)成功
-Local side VPN Server ping AWS VPN Server private subnet端IP(10.0.1.199)成功
-AWS private subnet DB server ping local side lan端IP(172.30.8.199、172.30.8.6)成功
- 如果這邊不成功,除了確認該security group已加入允許兩邊LAN端通過的規則外,再請確認private subnet之route table有將default gatway指到AWS Side VPN instance上,否則LAN端還是不會通。
- 此建置對於網路1~3層的知識與iptables的運作方式之理解需求很高,務必先有一定的了解後對於之後的debug才會比較順利。