일부 애플리케이션을 실행하기 위해 네트워크 네임스페이스(라는 이름)를 만들었습니다 ppn
. 이것은 잘 작동하지만 내 비즈니스 VPN(OpenVPN 기반)도 활성화하면 트래픽이 단방향으로만 발생하는 것 같습니다.
네트워크 네임스페이스를 생성하려면 다음 논리를 따르십시오(동일한 IP 주소 사용).https://askubuntu.com/a/499850/820897
VPN이 비활성화되면 네트워크 네임스페이스에서 8.8.8.8을 ping하면 정상적으로 작동합니다.
sudo ip netns exec ppn ping 8.8.8.8
그러나 VPN이 활성화되면 tcpdump -i tun0 host 8.8.8.8
ICMP 에코 요청이 기록되지만 ICMP 에코 응답을 받지 못합니다.
아래에서 내 iptables 및 IP 라우팅 목록을 찾을 수 있습니다.
- wlo1은 192.168.2.106에 있습니다.
- tun0은 10.8.1.12에 있습니다.
sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s 5.180.62.60/32 -i wlo1 -j ACCEPT
-A INPUT -s 5.180.62.60/32 -i enp5s0 -j ACCEPT
-A INPUT -i wlo1 -j DROP
-A INPUT -i enp5s0 -j DROP
-A OUTPUT -d 5.180.62.60/32 -o wlo1 -j ACCEPT
-A OUTPUT -d 5.180.62.60/32 -o enp5s0 -j ACCEPT
-A OUTPUT -o wlo1 -j DROP
-A OUTPUT -o enp5s0 -j DROP
sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 192.168.163.0/24 -o wlo1 -j SNAT --to-source 192.168.2.106
IP 라우팅
0.0.0.0/1 via 10.8.1.1 dev tun0
default via 192.168.2.1 dev wlo1 proto dhcp metric 600
5.180.62.60 via 192.168.2.1 dev wlo1
10.8.1.0/24 dev tun0 proto kernel scope link src 10.8.1.12
128.0.0.0/1 via 10.8.1.1 dev tun0
169.254.0.0/16 dev tun0 scope link metric 1000
192.168.2.0/24 dev wlo1 proto kernel scope link src 192.168.2.106 metric 600
192.168.163.0/24 dev veth-b proto kernel scope link src 192.168.163.254
sudo ip netns는 ppn ip 라우팅을 실행합니다.
default via 192.168.163.254 dev veth-a
192.168.163.0/24 dev veth-a proto kernel scope link src 192.168.163.1
VPN에서 네트워크 네임스페이스가 제대로 작동하도록 만드는 방법은 무엇입니까?
--------편집하다--------
sysctl net.ipv4.ip_forward = 1
내 시스템에서
답변1
패킷이 네트워크 네임스페이스를 벗어나면 (귀하의 경우) 네트워크에 소스 주소가 있습니다 192.168.163.0/24
. 로컬에서는 네트워크 네임스페이스로 다시 라우팅하는 것이 잘 작동하지만, 패킷이 로컬 시스템을 떠나면 이 소스 주소를 사용자 주소로 다시 라우팅하는 방법을 알고 있는 다음 홉/게이트웨이로 변환해야 합니다.
이것이 테이블에서 체인의 역할입니다 -j SNAT
. 그러나 귀하의 경우에는 인터페이스 외부로만 패킷을 보낼 수 있습니다. 그렇기 때문에 via 라우팅은 제대로 작동하지만 via(VPN 인터페이스)는 실패합니다.POSTROUTING
nat
SNAT
wlo1
wlo1
tun0
패킷이 경로를 통과할 때 tun0
네트워크에는 여전히 소스 주소가 있으며 192.168.163.0/24
VPN 서버는 해당 소스 주소에서 패킷을 반환하는 방법을 모릅니다.
SNAT
이 문제를 해결하려면 패킷을 tun0
인터페이스 밖으로 이동해야 합니다 . 여기서 가장 쉬운 옵션(glue 네트워크 주소는 일반적으로 동적이므로)은 target을 사용하는 것입니다 -j MASQUERADE
.
iptables -A POSTROUTING -t nat -s 192.168.163.0/24 -o tun0 -j MASQUERADE