Iptables

使用一台伺服器的區域網路訪問另一台伺服器的區域網路

  • July 20, 2018

我在這裡有點迷路,所以我請求你的幫助。=D

我有三台伺服器:

1# - LANs A and B
2# - LANs B and C
3# - LANs C and D

如何使伺服器 1# 通過 LAN B 訪問使用 2# 伺服器的 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 ( ping 10.0.4.4) 在伺服器1# ’traversing’ path B -> C -> D上執行。

**注意:**我已經做了很多很多測試,我真的不知道如何解決這個問題…… =[


編輯#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

伺服器 #2

  • 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

伺服器 #3

  • 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->命令沒有響應。
  • 重要-> 這些是我在虛擬機上進行的測試。

這是一個非常基本的聯網事情:如果你想連接不同的 LAN 網段,你需要一個路由器。你不需要 NAT,你不需要iptables,你只是路由,簡單明了。

出於某種原因,人們似乎認為路由至少需要 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 分發它們,或者將它們添加到合適的配置文件中。

引用自:https://unix.stackexchange.com/questions/457270