iptables 라우팅/NATing 2 VPN 사용

iptables 라우팅/NATing 2 VPN 사용

이것은 내 설정입니다.

Internet - router - Unix router - VPN1
                                - VPN2

router: 192.168.2.1/24
Unix router: 192.168.2.55/24
VPN1: 10.0.1.0/24 (Unix router: 10.0.1.10)
VPN2: 10.0.2.0/24 (Unix router: 10.0.2.10)

내가 무엇을 시도하든, 직접 연결을 통해서라도 하나의 VPN 또는 다른 VPN에서 일부 패킷이 계속 잘못된 방향으로 전달됩니다. 나는 성공하지 못한 채 connmark를 사용해 보았습니다.

내 Unix 라우터의 기본 발신 연결에는 VPN이 아닌 직접 연결이 필요합니다.

또한 VPN에서 Unix 라우터로 일부 트래픽을 전달할 수 있기를 원합니다. 여기서 역방향 경로를 적절하게 제어하는 ​​것이 복잡해집니다.

VPN 서버가 192.168.2.0/24 LAN에 액세스할 수 있는지 여부는 중요하지 않지만, 그렇다면 좋을 것입니다.

iptables누구든지 이것을 사용하거나 올바른 방향으로 나를 가리킬 수 있습니까 iproute2?

iroute현재 OpenVPN 옵션 세트의 결과 는 다음과 같습니다 .

 # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp4s0f0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:1b:21:4e:3d:8a brd ff:ff:ff:ff:ff:ff
3: enp4s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:1b:21:4e:3d:8b brd ff:ff:ff:ff:ff:ff
4: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:23:54:27:2b:c5 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::223:54ff:fe27:2bc5/64 scope link
       valid_lft forever preferred_lft forever
5: br0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:23:54:27:2b:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.55/24 brd 192.168.2.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::223:54ff:fe27:2bc5/64 scope link
       valid_lft forever preferred_lft forever
6: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:7d:a4:f6 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe7d:a4f6/64 scope link
       valid_lft forever preferred_lft forever
7: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:41:24:60 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe41:2460/64 scope link
       valid_lft forever preferred_lft forever
18: tun2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.0.2.10 peer 10.0.2.1/32 scope global tun2
       valid_lft forever preferred_lft forever
19: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.0.1.10 peer 10.0.1.1/32 scope global tun1
       valid_lft forever preferred_lft forever

 # ip route
default via 192.168.2.1 dev br0  metric 5
10.0.1.0/24 via 10.0.1.1 dev tun1
10.0.1.0/24 via 10.0.2.1 dev tun2
10.0.1.1 dev tun1  proto kernel  scope link  src 10.0.1.10
10.0.2.0/24 via 10.0.1.1 dev tun1
10.0.2.0/24 via 10.0.2.1 dev tun2
10.0.2.1 dev tun2  proto kernel  scope link  src 10.0.2.10
104.223.87.195 via 192.168.2.1 dev br0
192.168.2.0/24 dev br0  proto kernel  scope link  src 192.168.2.55
204.44.85.107 via 192.168.2.1 dev br0

답변1

첫째, 내 주요 질문은 net.ipv4.conf.default.rp_filter이고 net.ipv4.conf.all.rp_filter설정해야 합니다 2. 실시간으로 확인 /etc/sysctl.conf및 변경하고, 변경 사항을 적용하는데 활용하세요 .sysctl -p /etc/sysctl.conf

즉, 반환 트래픽을 제어하는 ​​완전한 솔루션은 먼저 다음 연결을 추적하는 것입니다 connmark.

iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0x0 -j ACCEPT
iptables -t mangle -A PREROUTING -i tun1 -j MARK --set-xmark 0x1
iptables -t mangle -A PREROUTING -i tun2 -j MARK --set-xmark 0x2
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark

그런 다음 정책 기반 라우팅을 설정해야 합니다. 두 개의 새로운 라우팅 테이블을 정의해야 합니다 /etc/iproute2/rt_tables. 예를 들면 다음과 같습니다.

101     VPN1
102     VPN2

그런 다음 각 테이블에서 양방향 경로를 만듭니다. 제 경우에는 제가 받은 VPN 클라이언트 IP는 이었고 10.0.1.10, 10.0.2.10로컬 네트워크 인터페이스는 이었습니다 192.168.2.55. 그래서 저는 이렇게 합니다:

ip route add 192.168.2.0/24 via 192.168.2.55 table VPN1
ip route add 192.168.2.0/24 via 192.168.2.55 table VPN2

그런 다음 태그 세트를 기반으로 다음 표를 따르도록 규칙을 설정합니다.

ip rule add fwmark 1 table VPN1
ip rule add fwmark 2 table VPN2

마지막으로 VPN에서 upscript.sh기본 게이트웨이를 설정했습니다.

ip route add default via 10.0.1.1 table VPN1

.. VPN1의 경우 및

ip route add default via 10.0.2.1 table VPN2

..VPN2의 경우.

VPN 서버가 트래픽을 LAN으로 직접 라우팅할 수 있도록 하려면 각 서버( )와 해당 구성 파일('openvpnserver.conf`)에서 iroute해당 클라이언트에 대한 OpenVPN 지시어를 사용해야 합니다.ccd/client

이제 VPN을 실행하면 트래픽이 항상 원래 위치로 돌아가야 합니다.

VPN 서버에서 역방향 매스커레이딩을 수행하는 것이 가능하지만 이렇게 하면 소스 IP가 숨겨지므로 도저히 받아들일 수 없습니다.

관련 정보