我正在嘗試建立一個 OpenVPN 網關從我的專有網絡->進入這辦公室網路。我已在我的一個 EC2 執行個體上成功設定了 VPN 用戶端(我們將其命名為「網關」),現在它具有 VPN 虛擬介面「tun0」。
現在,我想將所有與辦公室相關的流量 (dst 172.20.0.0/16) 從 VPC 中的其餘 EC2 執行個體路由到「網關」的網路介面 (10.0.0.100)。
我嘗試了兩種不同的方法:
- 在相關的AWS路由表中新增規則:172.20.0.0/16 -> eni-XXX(其中eni-XXX是「網關」介面的id);
- 更新EC2的路由表:route add -net 172.20.0.0 netmask 255.255.0.0 gw 10.0.0.100
這兩個變體似乎都失敗了,因為在網關上運行“tcpdump -i eth0 'src port not 22 and dst port not 22'”並且curling/pinging內部辦公室ips沒有顯示任何內容:(
有人知道出了什麼問題嗎?或者可能有更好的解決方案來解決我的問題?
第二個問題。一旦我在網關的 eth0 上獲得流量,我計劃使用以下 IpTables 命令將其轉送到 VPN 連線:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i eth0 -s 10.0.0.0/16 -o tun0 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
我應該預料到這裡會出現任何問題(除了啟用 IP 轉送)嗎?
答案1
您的方法不是最理想的。您應該使用 AWS虛擬專用網關將您的辦公室連接到 VPN,而不是連接到一個 EC 執行個體上的 VPN 並嘗試從那裡進行路由。
嘗試一下,文件很好,如果您遇到問題,您可能應該開始一個新問題。如果您無法使用此解決方案,您應該編輯您的問題以包含有關您的用例的更多詳細資訊。
答案2
好吧,我的主要問題是 AWS - 預設情況下它不允許在 EC2 執行個體之間路由流量。要解決這個問題,應該要停用來源/目標檢查對於您的“網關”實例。之後,將路由新增至 AWS 路由表中,將所有針對辦公室的流量重新導向至「網關」ec2 實例(例如 172.20.0.0/16 -> eni-XXX - 其中 eni-XXX 是網關介面的 ID)。的。
至於將流量從公共網路介面(eth0)轉送到OpenVpn虛擬網路接口,iptables很容易解決這個問題:
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE
iptables -A FORWARD -i eth0 -s 10.0.0.0/16 -d 172.20.0.0/16 -o tun0 -j ACCEPT
其中「10.0.0.0/16」是VPC子網,「172.20.0.0/16」是辦公室網路。另外,當然也要啟用 IP 轉送:
echo 1 > /proc/sys/net/ipv4/ip_forward
vim /etc/sysctl.conf <- net.ipv4.ip_forward = 1
感謝大家的回覆。