マイコンピュータは、ethインターネット接続を共有するためのWi-Fi APを提供しています。痛みなく働きます。
eth
VPN経由でトンネリングした後、「WifiAPクライアント」がオンラインに接続できるように、コンピュータをVPNサーバー(私の<=> VPNリモートサーバー)に接続することにしました。そしてそれは正しく動作しません。
効果は何ですか?:マイコンピュータがインターネットに接続してipecho.net/plain
リモートVPNサーバーIPをレンダリングできます。いいね、WifiAPクライアントはリモートVPNサーバーのIPをpingできます。
何が失敗したのか:WiFiAPクライアントは他のものをpingすることはできず、ドメインもまったくありません(8.8.8.8 GDNS IPに到達できません...ドメインチェックなし)。
つまり、誰でもVPNなしでWi-Fiに接続し、インターネットをサーフィンできます。 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
____ServerIptables
*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
答え1
問題は何ですか?
したがって、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
、これはMASQUERADE
許可されますeth0
。ただし、ルート テーブルは、tun0
2 つの行のいずれかがGENMASK 128.0.0.0
常にdefault
宛先の前に一致するため、インターフェイスを介してすべての一般的なトラフィックを転送します。つまり、着信パケットは転送されますが、通常のトラフィックはそのインターフェイスを通過します。パケットを転送しようとしています。eth0
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
tun0
wlan0
#!/bin/bash
# I named this script "nat"
if [ $# -lt 2 ]
then
echo usage: nat \<internet connection iface\> \<recieving iface\>
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
答え2
VPNとファイアウォールルールの設定には問題はありません。欠けているのは、ゲートウェイ192.168.0.1が1つだけで、eth0を介してのみアクセスでき、もちろんwlan0からはアクセスできないことです。ルーティングテーブルを確認してください。
この行動はノーマル:カーネルがパケットをルーティングする方法を明示的に知る必要があるため、すべてのオペレーティングシステムにゲートウェイに接続されたインターフェイスが1つしかない場合があります。
Linuxを除くすべてのオペレーティングシステムで2番目(および3番目、4番目...)ルーティングテーブルを追加できます。ただし、各パステーブルルールを明示的に使用するタイミングをカーネルに通知するコマンドも追加できます。実行する必要がある作業は次のとおりです。第二ルーティングテーブルを追加し、tun0サブネット内のすべてのパケットを2番目のルーティングテーブルを介してルーティングする必要があるというルールを追加します。
これをポリシールーティングと呼びます。次のように実行できます。新しいテーブルの名前を選択してから
echo 200 <NAME1> >> /etc/iproute2/rt_tables
ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
(ここでDEV1はwlan0で、NET1とSRC1はwlan0の既存のネットワークとIPアドレスです。)
ip route add default via <IP1> table <NAME1>
(IP1はLANのゲートウェイです)そして最後に
ip rule add from <IP1> table <NAME1>
ここで、IP1 はインターフェイス tun0 のサブネットです。
これだ。