我在这里有点迷失,所以我请求你的帮助。 =D
我有三台服务器:
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
( iptables
) 或 CentOS 7 上提供的任何其他功能。
为了显示
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#‘穿越’路径B -> C -> D。
笔记:我做了很多很多测试,我真的不知道如何解决这个问题...=[
编辑#1
为了让事情变得更容易,我决定用真实的信息来丰富这个线程。
服务器#1- LAN A -> 忽略
局域网 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
- 局域网 B -> enp0s17 (192.168.56.0/24)
局域网 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
- 局域网 C -> tun0 (10.8.0.0/24)
局域网 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 A 和 B 上想要访问 LAN C 和 D 的所有其他主机上也是如此。在服务器#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)
具有 2 个 NIC(具有来自两个不同网络的 2 个 IP 地址)的位置。您还需要设置此服务器,以便它转发流量。 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