Networking

為什麼 ip_forwarding=1 使用 VPN 失敗?

  • September 18, 2015

我的電腦提供了一個 Wifi AP,用於共享其 eth Internet 連接。它工作無痛。

我決定將我的電腦連接到我的 VPN 伺服器(我的eth<=> VPN 遠端伺服器),以便我的“WifiAP 客戶端”在通過我的 VPN 建立隧道後上網衝浪。而且它不能完全工作。

有什麼作用:我的電腦可以上網並ipecho.net/plain呈現遠端 VPN 伺服器 IP。好的。WifiAP 客戶端可以 ping 遠端 VPN 伺服器 IP。

失敗的原因:WifiAP 客戶端無法 ping 其他任何東西,並且絕對沒有域(無法達到 8.8.8.8 GDNS ip…沒有域解析)。

簡而言之,沒有 VPN,任何人都可以加入 wifi 並瀏覽 WWW。有了VPN,只有我的電腦可以做到。

ip_forwarding不是為了隧道?

怎麼了 ?我該如何解決?

____ VPN開啟時的路由:

Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
default         10.8.0.77       128.0.0.0       UG    0      0        0 tun0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
10.8.0.1        10.8.0.77       255.255.255.255 UGH   0      0        0 tun0
10.8.0.77       *               255.255.255.255 UH    0      0        0 tun0
13.37.42.0      *               255.255.255.0   U     0      0        0 wlan0
ns350510.ip-3-1  192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.8.0.77       128.0.0.0       UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 eth0
192.168.0.0     *               255.255.254.0   U     0      0        0 eth0

___ VPN關閉時的路由

Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
13.37.42.0      *               255.255.255.0   U     0      0        0 wlan0
link-local      *               255.255.0.0     U     1000   0        0 eth0
192.168.0.0     *               255.255.254.0   U     0      0        0 eth0

__電腦的IPtables(提供WIFI AP並連接到VPN伺服器):

# Generated by iptables-save v1.4.21 
   *mangle
   :PREROUTING ACCEPT [7471:1066114]
   :INPUT ACCEPT [5960:830272]
   :FORWARD ACCEPT [1339:216774]
   :OUTPUT ACCEPT [717:92366]
   :POSTROUTING ACCEPT [2116:318321]
   :internet - [0:0]
   -A PREROUTING -j internet
   -A internet -m mac --mac-source 60:F8:4D:BE:43:AE -j RETURN
   -A internet -j MARK --set-xmark 0x3e7/0xffffffff
   COMMIT
   # Completed 
   # Generated by iptables-save v1.4.21 
   *nat
   :PREROUTING ACCEPT [1710:298954]
   :INPUT ACCEPT [1480:280336]
   :OUTPUT ACCEPT [28:4162]
   :POSTROUTING ACCEPT [86:6162]
   -A PREROUTING -i wlan0 -p tcp -m mark --mark 0x3e7 -m tcp --dport 80 -j DNAT --to-destination 13.37.42.1:80
   -A PREROUTING -i wlan0 -p tcp -m mark --mark 0x3e7 -m tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to-destination 13.37.42.1:80
   -A POSTROUTING -o eth0 -j MASQUERADE
   -A POSTROUTING -o wlan0 -j MASQUERADE
   COMMIT
   # Completed 
   # Generated by iptables-save v1.4.21 
   *filter
   :INPUT ACCEPT [6041:840617]
   :FORWARD ACCEPT [380:110945]
   :OUTPUT ACCEPT [753:102159]
   -A FORWARD -i wlan0 -j ACCEPT
   COMMIT
   # Completed 

____ 伺服器 OpenVPN 配置

port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key

dh dh2048.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp bypass-dns"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
comp-lzo
max-clients 100
user nobody
group nobody
persist-key
persist-tun
status /etc/openvpn/logs/openvpn-status.log
log-append /etc/openvpn/logs/openvpn.log
verb 3

___ 客戶端 OpenVPN 會議

client
ns-cert-type server
remote www.example.com 1194
#route-nopull
ca ca.crt
cert client_1337.crt
key client_1337.key
dev tun
proto udp
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3

___伺服器 iptables

*filter
   :INPUT ACCEPT [1623:213921]
   :FORWARD ACCEPT [0:0]
   :OUTPUT ACCEPT [911:146048]
   :acctboth - [0:0]
   :cphulk - [0:0]
   -A INPUT -j cphulk 
   -A INPUT -j acctboth 
   -A INPUT -i eth0 -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT 
   -A INPUT -i tun+ -j ACCEPT 
   -A FORWARD -i tun+ -j ACCEPT 
   -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
   -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT 
   -A OUTPUT -j acctboth 
   -A OUTPUT -o tun+ -j ACCEPT 
   -A acctboth -s 3.1.170.110/32 ! -i lo -p tcp -m tcp --dport 80 
   -A acctboth -d 3.1.170.110/32 ! -i lo -p tcp -m tcp --sport 80 
   -A acctboth -s 3.1.170.110/32 ! -i lo -p tcp -m tcp --dport 25 
   -A acctboth -d 3.1.170.110/32 ! -i lo -p tcp -m tcp --sport 25 
   -A acctboth -s 3.1.170.110/32 ! -i lo -p tcp -m tcp --dport 110 
   -A acctboth -d 3.1.170.110/32 ! -i lo -p tcp -m tcp --sport 110 
   -A acctboth -s 3.1.170.110/32 ! -i lo -p icmp 
   -A acctboth -d 3.1.170.110/32 ! -i lo -p icmp 
   -A acctboth -s 3.1.170.110/32 ! -i lo -p tcp 
   -A acctboth -d 3.1.170.110/32 ! -i lo -p tcp 
   -A acctboth -s 3.1.170.110/32 ! -i lo -p udp 
   -A acctboth -d 3.1.170.110/32 ! -i lo -p udp 
   -A acctboth -s 3.1.170.110/32 ! -i lo 
   -A acctboth -d 3.1.170.110/32 ! -i lo 
   -A acctboth -s 10.8.0.1/32 ! -i lo -p tcp -m tcp --dport 80 
   -A acctboth -d 10.8.0.1/32 ! -i lo -p tcp -m tcp --sport 80 
   -A acctboth -s 10.8.0.1/32 ! -i lo -p tcp -m tcp --dport 25 
   -A acctboth -d 10.8.0.1/32 ! -i lo -p tcp -m tcp --sport 25 
   -A acctboth -s 10.8.0.1/32 ! -i lo -p tcp -m tcp --dport 110 
   -A acctboth -d 10.8.0.1/32 ! -i lo -p tcp -m tcp --sport 110 
   -A acctboth -s 10.8.0.1/32 ! -i lo -p icmp 
   -A acctboth -d 10.8.0.1/32 ! -i lo -p icmp 
   -A acctboth -s 10.8.0.1/32 ! -i lo -p tcp 
   -A acctboth -d 10.8.0.1/32 ! -i lo -p tcp 
   -A acctboth -s 10.8.0.1/32 ! -i lo -p udp 
   -A acctboth -d 10.8.0.1/32 ! -i lo -p udp 

問題是什麼

所以你想要的是讓網路地址傳輸正常工作(NAT)。我不假裝是iptables專家,但我可以根據您的這一部分看到iptables-save

*nat
:PREROUTING ACCEPT [1710:298954]
:INPUT ACCEPT [1480:280336]
:OUTPUT ACCEPT [28:4162]
:POSTROUTING ACCEPT [86:6162]
-A PREROUTING -i wlan0 -p tcp -m mark --mark 0x3e7 -m tcp --dport 80 -j DNAT --to-destination 13.37.42.1:80
-A PREROUTING -i wlan0 -p tcp -m mark --mark 0x3e7 -m tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to-destination 13.37.42.1:80
-A POSTROUTING -o eth0 -j MASQUERADE #####this line
-A POSTROUTING -o wlan0 -j MASQUERADE

…這部分:

*filter
:INPUT ACCEPT [6041:840617]
:FORWARD ACCEPT [380:110945]
:OUTPUT ACCEPT [753:102159]
-A FORWARD -i wlan0 -j ACCEPT  #####this line
COMMIT

…你似乎正在轉發進來的東西wlan0,這是允許MASQUERADEeth0。但是,您的路由表將通過您的介面引導所有一般流量tun0,因為兩行中的一條GENMASK 128.0.0.0將始終在default目的地之前匹配eth0with GENMASK 0.0.0.0。這意味著您將傳入wlan0數據包轉發到eth0,但您的一般流量通過介面tun0。您要將wlan0數據包轉發到tun0.

可能的解決方案

您可以通過執行以下命令來解決此問題,而無需更改任何現有的iptables (同樣,我不是iptables專家,而且您iptables的比我的複雜得多):

sudo iptables --table nat --append POSTROUTING --out-interface tun0 -j MASQUERADE

我如何進行 NAT

我寫了這個簡短的腳本來在我的電腦上設置 NAT,因為我永遠記不住這些命令。因此,在您的其餘部分不在的情況下iptables,您可以執行nat tun0 wlan0以將網際網路連接傳遞tun0wlan0.

#!/bin/bash
# I named this script "nat"
if [ $# -lt 2 ]
       then
       echo usage: nat \&lt;internet connection iface\&gt; \&lt;recieving iface\&gt;
       exit 0
fi

internetiface=$1;
receivingiface=$2;

sudo iptables --table nat --append POSTROUTING --out-interface $internetiface -j MASQUERADE
sudo iptables --append FORWARD --in-interface $receivingiface -j ACCEPT


echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

引用自:https://unix.stackexchange.com/questions/230268