여기서 조금 헤매고 있어서 도움을 요청합니다. =디
서버가 3개 있습니다.
1# - LANs A and B
2# - LANs B and C
3# - LANs C and D
2# 서버를 사용하여 1# 서버가 LAN B를 통해 3# 서버 LAN D의 IP에 액세스할 수 있도록 하는 방법은 무엇입니까?
노트:firewall-cmd
CentOS 7에서 사용 가능한 ( iptables
) 또는 기타 기능을 사용할 수 있습니다 .
보여주기 위해
LAN B - 192.168.56.0/24
LAN C - 10.8.0.0/24
LAN D - 10.0.4.0/24
그건ping 10.0.4.4
, 서버에서 ping( )을 실행합니다.1#'교차' 경로비 -> 씨 -> 디.
노트:정말 많은 테스트를 해봤지만 이 문제를 해결하는 방법을 모르겠습니다... =[
편집 #1
일을 더 쉽게 하기 위해 실제 정보로 이 스레드를 풍부하게 만들기로 결정했습니다.
서버 #1- LAN A -> 무시
LAN B -> enp0s17 (192.168.56.0/24)
[root@localhost ~]# ip a 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 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:12:26:e2:6c brd ff:ff:ff:ff:ff:ff inet 192.168.56.122/24 brd 192.168.56.255 scope global noprefixroute enp0s17 valid_lft forever preferred_lft forever inet6 fe80::a00:12ff:fe26:e26c/64 scope link valid_lft forever preferred_lft forever
- LAN B -> enp0s17 (192.168.56.0/24)
LAN C -> tun0 (10.8.0.0/24)
[root@localhost ~]# ip a 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 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:2c:d1:58 brd ff:ff:ff:ff:ff:ff inet 10.0.2.10/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s8 valid_lft 888sec preferred_lft 888sec inet6 fe80::2c5c:27aa:2636:8dc9/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:1c:a6:b9:59 brd ff:ff:ff:ff:ff:ff inet 192.168.56.120/24 brd 192.168.56.255 scope global noprefixroute enp0s17 valid_lft forever preferred_lft forever inet6 fe80::a00:1cff:fea6:b959/64 scope link 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 link/none inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::6a67:7379:b64:967c/64 scope link flags 800 valid_lft forever preferred_lft forever
- LAN C -> tun0 (10.8.0.0/24)
LAN D -> enp0s8 (10.0.4.0/24)
[root@localhost ~]# ip a 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 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:71:77:07 brd ff:ff:ff:ff:ff:ff inet 10.0.4.4/24 brd 10.0.4.255 scope global noprefixroute dynamic enp0s8 valid_lft 1115sec preferred_lft 1115sec inet6 fe80::899f:8ca4:a7c6:25a7/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:ea:4e:40:ae brd ff:ff:ff:ff:ff:ff inet 192.168.56.121/24 brd 192.168.56.255 scope global noprefixroute enp0s17 valid_lft forever preferred_lft forever inet6 fe80::a00:eaff:fe4e:40ae/64 scope link valid_lft forever preferred_lft forever 4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.8.0.6/24 brd 10.8.0.255 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::48c2:b3cd:5845:5d35/64 scope link flags 800 valid_lft forever preferred_lft forever
@slm의 제안에 따라 우리는 다음을 수행했습니다.
서버 #2의 명령$ echo -n "net.ipv4.ip_forward=1" >> /etc/sysctl.d/ip_forward.conf
$ sysctl -w net.ipv4.ip_forward=1
$ firewall-cmd --permanent --direct --passthrough ipv4 -t nat \
-I POSTROUTING -o tun0 -j MASQUERADE -s 192.168.56.0/24
$ firewall-cmd --reload
서버 #1의 명령
$ ping 10.0.4.4
- 질문-> 명령이 응답하지 않았습니다
ping 10.0.4.4
. - 중요한-> 이것은 가상 머신에서의 테스트입니다.
답변1
이것은 매우 기본적인 네트워킹입니다. 서로 다른 LAN 세그먼트를 연결하려면 다음이 필요합니다.라우터. NAT도 필요 없고 iptables
단순하고 간단하게 라우팅하면 됩니다.
어떤 이유로 사람들은 라우팅에 최소한 NAT 또는 NAT가 필요하다고 생각하는 것 같습니다 iptables
. 인터넷에는 이에 대한 조언이 가득합니다. 이것은 정말 불필요하고 약간의 성가심입니다.
당신이해야 할 일은
1) 서버 #2에서 전달을 활성화합니다. 이에 대해서는 이미 설명했습니다. 에 파일을 추가하고 /etc/sysctl.d/
재부팅한 후 cat /proc/sys/net/ipv4/ip_forward
표시 되는지 확인 1
하거나 를 사용하여 직접 활성화하세요 echo 1 > /proc/sys/net/ipv4/ip_forward
.
2)게이트웨이를 사용할 모든 호스트에 라우팅을 설정합니다.. 이것이 대부분의 사람들이 잊어버리는 것입니다. 따라서 서버 #1에는 다음과 같은 것이 필요합니다.
ip route add 10.8.0.0/24 dev enp0s17 via 192.168.56.120
ip route add 10.0.4.0/24 dev enp0s17 via 192.168.56.120
LAN C와 D에 액세스하려는 LAN A와 B의 다른 모든 호스트에도 마찬가지입니다. 서버 #3(및 해당 서버가 접촉하는 다른 모든 호스트)에는 다음이 필요합니다.
ip route add 192.168.56.0/24 dev tun0 via 10.8.0.1
이는 각 호스트에게 원격 LAN에 도달하려고 할 때 서버 #2를 거쳐 로컬 LAN에 있는 서버 #2의 적절한 IP 주소를 사용해야 함을 알려줍니다.
ip route get a.b.c.d
서버 #1과 서버 #3에서 경로가 작동하는지 테스트할 수 있습니다 . 이제 테스트에 사용해보세요 ping
. 여전히 문제가 있으면 디버깅을 사용하세요 tcpdump
. 방화벽이 방해가 되는 경우 필요한 경우 방화벽을 비활성화하십시오.
모든 것이 정상이면 DHCP를 통해 배포하거나 적절한 구성 파일에 추가하는 등 어떤 방식으로든 경로를 영구적으로 만듭니다.
답변2
표면적으로는 NAT를 설명하고 있습니다. NAT(네트워크 주소 해석)은 한 네트워크(LAN)의 트래픽이 일반적으로 두 네트워크 사이에 있는 다른 서버(WAN)에서 오는 것으로 위장하는 곳입니다.
server #1
+-----------------+
| |
| |
| 10.0.0.2|------+
| | | server #3 (NAT) +--------------+
+-----------------+ +-------+ +-----------------+ | |
|switch |-----+10.0.0.1 | | (D) |
+-------+ | | | |
server #2 | | (C) 54.1.1.23 |-----------+ 54.1.1.1 |-----+Internet
+-----------------+ | | | | |
| | | +-----------------+ | |
| (B) | | | |
| 10.0.0.3|-------+ +--------------+
| |
+-----------------+
이 튜토리얼에서는 CentOS 7.x에서 설정하는 방법에 대해 설명합니다.CentOS 7에 아웃바운드 NAT 게이트웨이 배포.
이 유형의 설정의 요점은 (C)
서로 다른 두 네트워크의 IP 주소 2개와 NIC 2개를 갖도록 서버를 구성하는 것입니다. 또한 트래픽을 전달하도록 이 서버를 설정해야 합니다. Linux 시스템의 기본 동작은 다음을 수행하지 않는 것입니다.
$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/ip_forward.conf'
(C)
이 작업을 수행한 후에 는 트래픽도 전달하도록 시스템의 방화벽을 구성해야 합니다 .
$ sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat \
-I POSTROUTING -o eth0 -j MASQUERADE -s 10.0.0.0/24
$ sudo firewall-cmd --reload