내 컴퓨터는 eth 인터넷 연결을 공유하기 위한 Wi-Fi AP를 제공합니다. 고통없이 작동합니다.
eth
VPN을 통해 터널링한 후 "WifiAP 클라이언트"가 온라인에 접속할 수 있도록 컴퓨터를 VPN 서버(내 <=> VPN 원격 서버)에 연결하기로 결정했습니다 . 그리고 그것은 제대로 작동하지 않습니다.
효과는 무엇입니까?: 내 컴퓨터가 인터넷에 접속하여 ipecho.net/plain
원격 VPN 서버 IP를 렌더링할 수 있습니다. 좋아요 WifiAP 클라이언트는 원격 VPN 서버 IP를 ping할 수 있습니다.
무엇이 실패했는가:WiFiAP 클라이언트는 다른 어떤 것도 핑할 수 없으며 도메인도 전혀 없습니다(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
두 행 중 하나가 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이 하나만 있고 eth0을 통해서만 액세스할 수 있으며 물론 wlan0을 통해서는 액세스할 수 없다는 사실입니다. 라우팅 테이블을 확인하면 됩니다.
이 행동은정상: 커널이 패킷을 라우팅하는 방법을 명시적으로 알아야 하기 때문에 모든 운영 체제에는 게이트웨이에 연결된 인터페이스가 하나만 있을 수 있습니다.
Linux를 제외한 모든 운영 체제에서 두 번째(및 세 번째, 네 번째...) 라우팅 테이블을 추가할 수 있습니다. 단, 각 경로 테이블 규칙을 명시적으로 사용할 시기를 커널에 알려주는 명령도 추가하면 됩니다. 수행해야 할 작업은 다음과 같습니다.두번째라우팅 테이블을 추가하고 tun0 서브넷의 모든 패킷이 두 번째 라우팅 테이블을 통해 라우팅되어야 한다는 규칙을 추가합니다.
이를 정책 라우팅이라고 합니다. 다음과 같이 수행할 수 있습니다. 새 테이블의 이름을 선택한 다음
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의 서브넷입니다.
이게 다야.