
OpenVPN 서버와 클라이언트가 있고 이 터널을 사용하여 10.0.8.0/24
인터넷 전체에 액세스하고 싶습니다. 지금까지는 클라이언트에서 인터페이스를 통해 서버에 ping을 보내는 것이 tun0
작동하며 그 반대의 경우도 마찬가지입니다.
그러나 www.google.com
클라이언트로부터의 ping은 tun0
작동하지 않습니다(모든 패킷이 손실됨).
나는 인터넷 대상에서 들어오는 모든 패킷이 전달되도록 서버를 구성해야 한다고 생각하여 tun0
다음과 같은 iptables 구성 라인을 생각해 냈습니다.
interface_connecting_to_the_internet='eth0'
interface_openvpn='tun0'
internet_ip_address=`ifconfig "$interface_connecting_to_the_internet" | sed -n s'/.*inet \([0-9.]*\).*/\1/p'`
iptables -t nat -A POSTROUTING -o "${interface_connecting_to_the_internet}" -j SNAT --to-source "${internet_ip_address}"
echo '1' > /proc/sys/net/ipv4/ip_forward
그러나 이것은 작동하지 않습니다. 패킷은 여전히 손실되며 내 설정에 무엇이 문제가 될 수 있는지 궁금합니다.
일부 세부정보:
IP 경로는 서버에 다음을 제공합니다.
default via 176.31.127.254 dev eth0 metric 3
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
127.0.0.0/8 via 127.0.0.1 dev lo
176.31.127.0/24 dev eth0 proto kernel scope link src 176.31.127.109
IP 경로는 클라이언트에 다음을 제공합니다.
default via 192.168.1.1 dev wlan0 proto static
10.8.0.1 via 10.8.0.5 dev tun0
10.8.0.5 dev tun0 proto kernel scope link src 10.8.0.6
127.0.0.0/8 via 127.0.0.1 dev lo scope link
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.109
- 클라이언트는 Wi-Fi 어댑터
wlan0
와 TUN 어댑터를 사용합니다tun0
. - 서버는 이더넷 어댑터
eth0
와 TUN 어댑터를 사용합니다tun0
. VPN은 다음 위치에 있습니다.
10.0.8.0/24
클라이언트와 Linux 모두 Linux 3.6.1을 사용하고 있습니다.
답변1
토론을 요약하면 다음과 같습니다.
클라이언트 C에서 서버 S까지 VPN을 통해 특정 호스트 A에 도달하려면 다음을 수행해야 합니다.
- S에서 IP 전달 활성화(
sysctl -w net.ipv4.ip_forward=1
) iptables -t nat -A POSTROUTING -o ext_if -j MASQUERADE
S:에서 iptables를 통해 또는 andiptables -t nat -A POSTROUTING -o ext_if-j SNAT --to-source ext_ip
의 명백한 의미를 사용하여 가장 또는 snat를 활성화합니다 .ext_if
ext_ip
- C에서 적절한 라우팅을 설정합니다(S는 S의 IP 주소를 나타냄).VPN에서):
- S를 통해 A로 명시적인 경로를 설정하여:
ip route add A via S dev vpn_if
- S: 를 통해 기본 경로를 설정합니다.
ip route add default via S dev vpn_if
여기서 적절한 경로도 S: 로 설정해야 합니다ip route add S via previous_gateway dev prev_if
. - 서버에서 를 사용하면 OpenVPN은 S를 통해 C에 대한
push "redirect-gateway def1"
경로를 설정합니다 . 이 경로는 기본 경로보다 더 구체적이고 터널이 중지되면 쉽게 제거할 수 있습니다.0.0.0.0/1
128.0.0.0/1
- S를 통해 A로 명시적인 경로를 설정하여: