2개의 인터페이스를 통한 라우팅

2개의 인터페이스를 통한 라우팅

KVM 가상화 및 Ubuntu 20.04 LTS를 갖춘 VPS A

VPN 서버: 10.29.0.0/24

KVM 가상화가 포함된 VPS B, VPS A의 Ubuntu 20.04 LTS 포함
VPN 클라이언트: 10.29.0.19
VPN 서버: 10.8.0.0/24

VPS A를 제어하지 않으며 VPN 클라이언트 간 통신을 허용하는 VPN 서버 역할을 합니다.

VPS B 자체의 명령줄에서 VPS A에 있는 VPN 서버의 모든 클라이언트에 핑을 보낼 수 있습니다.

root@vpsB:~# ping 10.29.0.1
PING 10.29.0.1 (10.29.0.1) 56(84) bytes of data.
64 bytes from 10.29.0.1: icmp_seq=1 ttl=64 time=3.09 ms
64 bytes from 10.29.0.1: icmp_seq=2 ttl=64 time=3.10 ms
^C
--- 10.29.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.091/3.094/3.097/0.003 ms
root@vpsB:~# ping 10.29.0.5
PING 10.29.0.5 (10.29.0.5) 56(84) bytes of data.
64 bytes from 10.29.0.5: icmp_seq=1 ttl=64 time=59.8 ms
64 bytes from 10.29.0.5: icmp_seq=2 ttl=64 time=60.0 ms
^C
--- 10.29.0.5 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 59.761/59.877/59.994/0.116 ms
root@vpsB:~# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:3c:a2:85:61 brd ff:ff:ff:ff:ff:ff
    inet 217.XXX.XXX.111/24 brd 217.XXX.XXX.255 scope global eth0
       valid_lft forever preferred_lft forever
    
3: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.1/24 brd 10.8.0.255 scope global tun1
       valid_lft forever preferred_lft forever
    
4: tun3: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none
    inet 10.29.0.19/24 brd 10.29.0.255 scope global tun3
root@vpsB:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         217.XXX.XXX.1   0.0.0.0         UG    0      0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun1
10.29.0.0       0.0.0.0         255.255.255.0   U     0      0        0 tun3
217.XXX.XXX.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
root@vpsB:~# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT

10.8.0.0/24에서 10.29.0.0/24로 ping하려면 어떻게 해야 합니까?

답변1

iptables규칙은 위에서 아래로 처리됩니다. (당신이 가지고 있는 것) 에는 VPS-B재정렬해야 할 기존 NAT 규칙이 이미 있습니다. NAT 규칙을 재정렬하려면 기존 규칙을 텍스트 편집기에 복사한 다음 기존 규칙을 삭제해야 합니다. 그런 다음 NAT 규칙을 올바른 순서로 다시 추가합니다.

절차는 다음과 같습니다.

기존 NAT 체인 규칙 보기(삭제 전):

sudo iptables -t nat -L -n --line-numbers

규칙을 텍스트 편집기에 저장

기존 NAT 규칙을 삭제합니다.

sudo iptables -t nat -D POSTROUTING 1

모든 NAT 규칙이 제거될 때까지 위 명령을 반복합니다. 그런 다음 NAT 규칙을 다시 추가하십시오.

먼저 다음 규칙을 적용해야 합니다(나머지 NAT 규칙은 그 뒤를 따릅니다).

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 10.29.0.0/24 -o tun3 -j MASQUERADE

규칙의 순서가 올바른지 확인하세요.

sudo iptables -t nat -L -n --line-numbers

VPS-B는 이미 상호 연결되어 있으므로 10.8.0.0/2410.29.0.0/24서버에는 추가 라우팅 문이 필요하지 않습니다.

VPS-B를 VPN 서버로 사용하는 VPN 클라이언트에서 VPN 서버( 10.8.0.1)를 서브넷의 다음 홉으로 사용하도록 지시합니다.10.29.0.0/24

sudo ip route add 10.29.0.0/24 via 10.8.0.1

모든 것이 제대로 작동한다면 VPS-B 서버에 iptables 규칙을 저장하는 것을 고려해 보십시오. 가이드는여기

관련 정보