Iptables
為特定子網添加路由以使伺服器可通過 VPN 直接訪問?
我在一個隔離的網路上有一台 Linux 機器,我通過 VPN 進入。當我使用 VPN 時,VPN 伺服器為我分配了一個虛擬 IP,例如 192.168.251.x
我發現當我使用 VPN 時,我可以 RDP 到 Windows 盒子沒有問題。Ping、http、rdp 等都可以。但是,Linux 機器無法立即訪問。事實上,我必須先將 RDP 安裝到已經在該隔離網路上的機器上,然後才能通過 ssh 進入 Linux 機器。
這告訴我 Linux 機器只接受來自其本機子網上的設備的流量,並且我需要告訴它接受來自外部設備將源自的虛擬 VPN 子網的流量。
我試過這個規則:
sudo iptables -A INPUT -p tcp -s 192.168.251.0/24 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
其中 192.168.251.0/24 是虛擬 VPN 子網。但是我仍然無法從連接的主機上 ping Linux 機器。所以要麼我添加了錯誤的規則,要麼添加了錯誤的規則。任何提示/指導?
user@HOST:~> uname -a Linux HOST 3.0.51-0.7.9-default #1 SMP Thu Nov 29 22:12:17 UTC 2012 (f3be9d0) x86_64 x86_64 x86_64 GNU/Linux user@HOST:~> cat /proc/version Linux version 3.0.51-0.7.9-default (geeko@buildhost) (gcc version 4.3.4 [gcc-4_3-branch revision 152973] (SUSE Linux) ) #1 SMP Thu Nov 29 22:12:17 UTC 2012 (f3be9d0)
我添加了錯誤的規則,還是缺少規則?
編輯:
我目前的iptables:
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 192.168.251.0/24 anywhere ctstate NEW,ESTABLISHED
此外,icmp 和 http/s 流量的數據包擷取顯示來自我的 VPN 客戶端的流量流向 Linux 機器,但從未有任何來自 Linux 機器的返回流量。甚至沒有回复“無效的XXX”或其他任何內容。如果我沒記錯的話,這表明流量正在下降。
編輯:
user@HOST:~> ip route sh 127.0.0.0/8 dev lo scope link 169.254.0.0/16 dev eth0 scope link 192.168.20.0/24 dev eth0 proto kernel scope link src 192.168.20.219 user@HOST:~> sudo iptables --list Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere 192.168.251.0/24 ctstate ESTABLISHED
編輯:
我的解決方案是執行:
sudo ip route add default via 192.168.20.1
然後我可以通過 VPN 直接 ping 和 telnet 到盒子。
Linux 機器正在丟棄返回數據包,因為它沒有返回 VPN 網路的有效路由。
假設您的網關位於
192.168.20.1
,將其添加為 Linux 機器上的預設路由可能會解決您的問題:ip route add default via 192.168.20.1