通過 VPN 連接的 SSH
我們有一個 AWS EC2 伺服器,我們已將其配置為只能從我們的辦公網路內訪問(通過 SSH)。顯然,這對於有人必須連接到 EC2 實例並在辦公室外遠端工作(例如在出差期間)的遠端安排來說並不理想。
我已經設法通過 PPTP 建立了一個 VPN,並且可以連接到辦公室網路(我有兩個本地 IP,一個來自 wlan0,一個來自 ppp0),無論我身在何處。但是,當我 SSH 到 EC2 實例時,它仍然很可能拒絕我,因為它看到我仍在嘗試從網路外部進行 ssh。
我想問題是我無法路由 ssh 流量以通過 VPN。有什麼想法可以做到這一點嗎?
我的另一個選擇是通過 ssh 連接到辦公室網路中的一台機器,然後使用該機器連接到 EC2 實例,但我一直猶豫是否這樣做,因為這似乎太過分了。
假設您的 AWS 可以通過 IP“your.ec2.ip.address”上的 SSH 訪問。假設您的辦公室網路通過應用一些 NAT 轉換的路由器訪問 Internet,因此,您的辦公室 PC 在 Internet 上的 IP 為“your.office.external.ip”。
我們還假設您位於辦公室外,您的筆記型電腦連接到世界各地,並且:
- 本地 Internet 提供商分配的主 IP 地址(假設 192.168.0.33 和網路遮罩 255.255.255.0 和 def-gw 192.168.0.1);
- 一個 PPP0 地址,由您的遠端 PPTP 伺服器分配給您的筆記型電腦(一旦您的 VPN 隧道成功建立)。假設 PPP0 是 the.local.ppp0.ip,遠端 P2P 是.remote.pptp.address。換句話說,您的筆記型電腦知道是 .local.ppp0.ip 並且還知道在 VPN 隧道的另一端,您的 PPTP 伺服器可以通過 VPN 訪問,位於 .remote.pptp.address。
在這種情況下,如果您無法- 從您的筆記型電腦 - 通過“your.ec2.ip.address”訪問您的 AWS,我敢打賭,問題是 - 正如您猜想的那樣 - 路由:您的 SSH 流量定向到“ your.ec2.ip.address”不會將您的上網本留在 VPN 中,而是沿著通用的外部 VPN 路徑(又名:發送到您的本地網關:192.168.0.1)離開。
要診斷此問題,可以通過以下方式進行非常簡單的檢查:
- Linux:tracepath命令(例如:“tracepath -n your.ec2.ip.address”)
- windows:“tracert”命令(例如:“tracert -d your.ec2.ip.address”)
從輸出中,您可以檢查第二步是否報告 PPTP 地址。
如果您的流量沿著錯誤的路徑傳輸,在 VPN 內路由它的簡單解決方法是:
- Linux:“路由添加 -host your.ec2.ip.address gw the.remote.pptp.address”
- Windows:“路由添加 your.ec2.ip.address 遮罩 255.255.255.255 the.remote.pptp.address”
配置好上面的路由後,可以用tracert/tracepath再次查看路由
正確配置路由後,您辦公室內出現問題的可能性很小:如果您的 PPTP 伺服器沒有進行 IP 轉發和 NAT 轉換,那麼您很可能會遇到“過濾”,以防萬一您的筆記本和 your.ec2.ip.address 之間缺少 ip 轉發或“不對稱路由”(如果缺少 NAT):
- 從您到亞馬遜的流量,沿著 VPN 傳輸到您的辦公室,然後再到亞馬遜;
- 將流量從亞馬遜返回給您,沿著常見的網際網路路徑路由,並且……很有可能它被丟棄在某個地方。
同樣:tracepath/tracert 可以幫助您檢查問題。
在 linux 機器上,另一個非常有用的朋友是“tcpdump”。一些有用的 tcpdump 命令是:
- “tcpdump -n -i interface icmp” 檢查傳入/傳出的 PING 請求/響應;
- “tcpdump -n -i host an.ip.add.ress ” 檢查到達/發送到 an.ip.add.ress 的流量;