나는 데비안 컴퓨터 두 대를 가지고 있는데, 하나는 프록시로 설정되어 있고 다른 하나는 라우터로 설정되어 있습니다. 라우터라고 부르겠습니다. 내 목표는 DNAT 패킷이 Proxy1의 WAN에서 OpenVPN 터널을 통해 라우터로 이동하는 것입니다. 라우터와 프록시 1은 모두 인터넷에 액세스할 수 있고 서로 다른 WAN IP를 가지며 별도의 시스템입니다.
Proxy1에는 다음과 같은 규칙이 있습니다.
iptables -t nat -A PREROUTING -m tcp -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip route add 10.0.0.2/32 dev tun0
Proxy1과 라우터에서 "tcpdump -s 0 -w tcpdump.log -i any"를 실행하면 패킷이 WAN에서 오는 것을 볼 수 있으며 DNAT는 Proxy1에서 패킷의 대상을 변경하지만 라우터에서는 패킷이 도착하지 않았습니다.
이 문제의 가장 이상한 점은 MASQUERADE 규칙을 다음과 같이 변경하면 된다는 것입니다.
iptables -t nat -A POSTROUTING j MASQUERADE
그런 다음 DNAT가 적용되고 패킷이 라우터에 표시됩니다. 그러나 매스커레이딩은 패킷의 소스 주소를 변경하므로 라우터는 최종 소스 IP를 알 수 없습니다. 소스 주소가 10.0.1.2로 수정되면 패킷이 라우터에 도달하지만 소스 주소가 유지되면 패킷이 라우터에 도달하지 않는 이유를 이해할 수 없습니다.
대리인 정보:
데비안 GNU/리눅스 8 (제시)
커널 버전: Linux 3.16.0-4-amd64 x86_64
프록시 IP: 202.89.75.110
Proxy1에서 "ip Route get 10.0.0.2"를 실행하면 다음이 반환됩니다.
10.0.0.2 dev tun0 src 10.0.1.2
cache
Proxy1에서 "ip link; ip -4 address; ip -4 Route; ip -4 rule"을 실행한 결과:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:16:3c:95:70:75 brd ff:ff:ff:ff:ff:ff
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100
link/none
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet x.x.x.x/25 brd x.x.x.127 scope global eth0
valid_lft forever preferred_lft forever
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
inet 10.0.1.2/29 brd 10.0.1.7 scope global tun0
valid_lft forever preferred_lft forever
default via x.x.x.1 dev eth0
10.0.0.2 dev tun0 scope link
10.0.1.0/29 dev tun0 proto kernel scope link src 10.0.1.2
x.x.x.0/25 dev eth0 proto kernel scope link src x.x.x.x
0: from all lookup local
32765: from all fwmark 0x65 lookup 101
32766: from all lookup main
32767: from all lookup default
라우터에 대한 정보는 다음과 같습니다.
Debian GNU/Linux 10(스포일러)
커널 버전: Linux 4.19.0-6-amd64 x86_64
라우터 IP: 71.115.98.227
라우터에서 "ip link; ip -4 address; ip -4 Route; ip -4rule"을 실행한 결과:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 70:85:c2:d5:84:96 brd ff:ff:ff:ff:ff:ff
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 70:85:c2:d5:84:94 brd ff:ff:ff:ff:ff:ff
4: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100
link/none
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 10.0.0.1/24 brd 10.0.0.255 scope global enp2s0
valid_lft forever preferred_lft forever
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 71.115.98.227/21 brd 71.115.105.255 scope global dynamic eno1
valid_lft 38916sec preferred_lft 38916sec
4: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
inet 10.0.1.1/29 brd 10.0.1.7 scope global tun1
valid_lft forever preferred_lft forever
default via 71.115.98.1 dev eno1
10.0.0.0/24 dev enp2s0 proto kernel scope link src 10.0.0.1
10.0.1.0/29 dev tun1 proto kernel scope link src 10.0.1.1
71.115.98.0/21 dev eno1 proto kernel scope link src 71.115.98.227
0: from all lookup local
32765: from all fwmark 0x65 lookup 101
32766: from all lookup main
32767: from all lookup default
라우터의 "ip 경로 목록 테이블 101"의 출력:
default via 10.0.1.2 dev tun1
라우터에는 이러한 패킷을 서버로 보내는 다음과 같은 규칙이 있습니다.
iptables -t nat -A PREROUTING -m tcp -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80
iptables -P FORWARD ACCEPT
10.0.0.2의 서버는 라우터의 LAN에 있습니다. 라우터에서 전달을 활성화합니다. 라우터는 LAN의 게이트웨이입니다.
cat /proc/sys/net/ipv4/ip_forward
1을 반환
새로운 openvpn 서버 구성은 다음과 같습니다.
dev tun1
port 1194
proto udp4
ifconfig 10.0.1.1 10.0.1.2
secret static_p1.key
Proxy1의 새로운 openvpn 클라이언트 구성은 다음과 같습니다.
remote 71.115.98.227 1194 udp
dev tun0
ifconfig 10.0.1.2 10.0.1.1
script-security 2
route-up /etc/openvpn/proxyroute.sh
secret static_p1.key