如何通過 ipsec / xl2ptd vpn 訪問遠端區域網路機器(可能與 iptables 相關)
我正在嘗試為我們的辦公室設置 IPSEC / XL2TPD VPN,但在連接到 VPN 後訪問遠端本地電腦時遇到了一些問題。
我可以連接,並且可以通過 VPN 瀏覽 Internet 站點,但如前所述,我無法連接甚至 ping 本地站點。
我的網路設置是這樣的:
網際網路 > eth0 > 路由器 / VPN > eth2 > 區域網路
這些是 VPN 背後的一些跟踪路由:
traceroute to google.com (173.194.78.94), 64 hops max, 52 byte packets 1 192.168.1.80 (192.168.1.80) 74.738 ms 71.476 ms 70.123 ms 2 10.35.192.1 (10.35.192.1) 77.832 ms 77.578 ms 77.865 ms 3 10.47.243.137 (10.47.243.137) 78.837 ms 85.409 ms 76.032 ms 4 10.47.242.129 (10.47.242.129) 78.069 ms 80.054 ms 77.778 ms 5 10.254.4.2 (10.254.4.2) 86.174 ms 10.254.4.6 (10.254.4.6) 85.687 ms 10.254.4.2 (10.254.4.2) 85.664 ms traceroute to 192.168.1.3 (192.168.1.3), 64 hops max, 52 byte packets 1 * * * 2 *traceroute: sendto: No route to host traceroute: wrote 192.168.1.3 52 chars, ret=-1 *traceroute: sendto: Host is down traceroute: wrote 192.168.1.3 52 chars, ret=-1 * traceroute: sendto: Host is down 3 traceroute: wrote 192.168.1.3 52 chars, ret=-1 *traceroute: sendto: Host is down traceroute: wrote 192.168.1.3 52 chars, ret=-1
這些是我的 iptables 規則:
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # allow lan to router traffic iptables -A INPUT -s 192.168.1.0/24 -i eth2 -j ACCEPT # ssh iptables -A INPUT -p tcp --dport ssh -j ACCEPT # vpn iptables -A INPUT -p 50 -j ACCEPT iptables -A INPUT -p ah -j ACCEPT iptables -A INPUT -p udp --dport 500 -j ACCEPT iptables -A INPUT -p udp --dport 4500 -j ACCEPT iptables -A INPUT -p udp --dport 1701 -j ACCEPT # dns iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 53 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT iptables -t nat -A POSTROUTING -j MASQUERADE # logging iptables -I INPUT 5 -m limit --limit 1/min -j LOG --log-prefix "iptables denied: " --log-level 7 # block all other traffic iptables -A INPUT -j DROP
以下是一些防火牆日誌行:
Dec 6 11:11:57 router kernel: [8725820.003323] iptables denied: IN=ppp0 OUT= MAC= SRC=192.168.1.81 DST=192.168.1.3 LEN=60 TOS=0x00 PREC=0x00 TTL=255 ID=62174 PROTO=UDP SPT=61910 DPT=53 LEN=40 Dec 6 11:12:29 router kernel: [8725852.035826] iptables denied: IN=ppp0 OUT= MAC= SRC=192.168.1.81 DST=224.0.0.1 LEN=44 TOS=0x00 PREC=0x00 TTL=1 ID=15344 PROTO=UDP SPT=56329 DPT=8612 LEN=24 Dec 6 11:12:36 router kernel: [8725859.121606] iptables denied: IN=ppp0 OUT= MAC= SRC=192.168.1.81 DST=224.0.0.1 LEN=44 TOS=0x00 PREC=0x00 TTL=1 ID=11767 PROTO=UDP SPT=63962 DPT=8612 LEN=24 Dec 6 11:12:44 router kernel: [8725866.203656] iptables denied: IN=ppp0 OUT= MAC= SRC=192.168.1.81 DST=224.0.0.1 LEN=44 TOS=0x00 PREC=0x00 TTL=1 ID=11679 PROTO=UDP SPT=57101 DPT=8612 LEN=24 Dec 6 11:12:51 router kernel: [8725873.285979] iptables denied: IN=ppp0 OUT= MAC= SRC=192.168.1.81 DST=224.0.0.1 LEN=44 TOS=0x00 PREC=0x00 TTL=1 ID=39165 PROTO=UDP SPT=62625 DPT=8612 LEN=24
我很確定問題應該與 iptables 有關,但是在嘗試了很多不同的 conf 之後,我找不到合適的。
任何幫助將不勝感激;)。親切的問候,西蒙。
編輯:
這是我的路由表:
default 62.43.193.33.st 0.0.0.0 UG 100 0 0 eth0 62.43.193.32 * 255.255.255.224 U 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth2 192.168.1.81 * 255.255.255.255 UH 0 0 0 ppp0
您很可能遇到與這篇文章完全相同的問題
你的情況如下:
VPN 客戶端可以到達 VPN 伺服器並通過 VPN 隧道連接到網際網路,但無法到達伺服器 LAN 或任何其他 VPN 客戶端 ip。
因為您有 iptables NAT 規則,所以可以通過隧道連接到 Internet。其餘的你需要在 VPN 伺服器上應用以下內容:
啟用 tcp/ip 轉發
預設情況下,Linux TCP/IP 堆棧不轉發數據包(在介面之間或在 IP 網路之間重新路由它們)。它必須啟用
echo 1 > /proc/sys/net/ipv4/ip_forward
否則,VPN 伺服器將在本地接受 VPN 客戶端數據包,並根據 NAT 規則路由客戶端數據包,但不會將流量路由到本地網路。
iptables
預設情況下,iptables 會阻止所有流量。您需要規則來允許流量通過(轉發)。
$IPTABLES -A FORWARD -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT
PS:每個 vpn 連接都是一個單獨的(虛擬)介面(nic),要允許數據包在它們之間流動/路由,您需要在 iptables 中使用FORWARD 。
/etc/l2tpd.conf
當 vpn 客戶端需要一起通話時,vpn 伺服器充當路由點,需要在同一個網路上。
local ip 192.168.1.1 ip range 192.168.1.2 - 192.168.1.254
根據您的網路設置修改上述內容。如果您的 vpn 伺服器有 192.168.1.x ip,請將其用作“本地 ip”。
修改後的 iptables 腳本
如果您沒有對 vpn 伺服器的物理訪問權限,請務必小心。
(此腳本需要在 wan 介面上進行反欺騙,但讓我們專注於從 vpn 獲取流量到 lan 1st。)
# Reset/Flush iptables iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # Enable IP forwarding echo 1 > /proc/sys/net/ipv4/ip_forward # NAT # -- iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE # # Updated NAT rule # External interface = eth0 # External IP = 123.123.123.123 # Internal LAN = 192.168.1.0/24 # To support dynamic interface : "-j SNAT" replace "-j MASQUERADE" # NO NAT if destination is LAN iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j SNAT --to-source 123.123.123.123 # New(1) - lo # -- iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i lo -m state --state NEW -j ACCEPT iptables -A OUTPUT -o lo -m state --state NEW -j ACCEPT # -- iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # New(2) Allow inter-192.168.1.x routing iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -j ACCEPT iptables -A OUTPUT -s 192.168.1.0/24 -m state --state NEW -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -m state --state NEW -j ACCEPT # -- allow lan to router traffic - Shadowed by New(2) # -- This rule maybe your source of trouble too, it only accept 192.168.1.x from eth2 # -- iptables -A INPUT -s 192.168.1.0/24 -i eth2 -j ACCEPT # ssh iptables -A INPUT -p tcp --dport ssh -j ACCEPT # vpn iptables -A INPUT -p 50 -j ACCEPT iptables -A INPUT -p ah -j ACCEPT iptables -A INPUT -p udp --dport 500 -j ACCEPT iptables -A INPUT -p udp --dport 4500 -j ACCEPT iptables -A INPUT -p udp --dport 1701 -j ACCEPT # dns - Shadowed by New(2) # -- iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 53 -j ACCEPT # -- iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT # logging iptables -I INPUT 5 -m limit --limit 1/min -j LOG --log-prefix "iptables denied: " --log-level 7 # block all other traffic iptables -A INPUT -j DROP