我遇到了隧道问题,很难找到解决方案。我有两台服务器,A:主机服务器,具有单个 IP 的服务器,B:主服务器,处理我们所有应用程序的服务器。
我成功设置了 GRE 隧道,但应用程序需要 (A) 服务器 IP ( 192.168.0.1 ) 位于 (B) 服务器 Eth0 上,以便应用程序可以使用该 IP 作为自己的 IP(这是必须的)。但是,当我尝试将 (A) IP 添加到 (B) 时,我认为发生了路由循环,我无法弄清楚如何让流量正确流动。我在 iptabels 上尝试了一些 PREROUTE 和 POSTROUTE,但收效甚微。以下是我得到的设置,一切都停止工作。
任何帮助都将不胜感激!
细节:
服务器 A: 主机:
Public IP: 192.168.0.1
Tunnel IP: 10.0.2.1
服务器 B:主服务器:
Public IP: 192.168.1.2
Tunnel IP: 10.0.2.2
服务器 A:
添加隧道
sudo ip tunnel add test_tunnel mode gre local 192.168.0.1 remote 192.168.1.2 ttl 255
sudo ip addr add 10.0.2.1/30 dev test_tunnel
sudo ip link set test_tunnel up
sudo echo '101 test_tunnel_GRE' >> /etc/iproute2/rt_tables
/sbin/ip route add default via 10.0.2.2 dev test_tunnel table test_tunnel_GRE
/sbin/iptables -t nat -A POSTROUTING -s 10.0.2.0/30 ! -o gre+ -j SNAT --to-source 192.168.0.1
/sbin/iptables -A FORWARD -d 10.0.2.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -s 10.0.2.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
测试隧道 IP 以 ping 并查看是否有响应(有效)。
root@A:~# ping -c4 10.0.2.2
PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=50.6 ms
64 bytes from 10.0.2.2: icmp_seq=2 ttl=64 time=49.6 ms
64 bytes from 10.0.2.2: icmp_seq=3 ttl=64 time=49.7 ms
64 bytes from 10.0.2.2: icmp_seq=4 ttl=64 time=49.7 ms
--- 10.0.2.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 49.636/49.945/50.651/0.439 ms
在服务器上测试应该会看到隧道服务器 IP:(有效)
root@A:~# curl http://www.cpanel.net/showip.cgi --interface 10.0.2.1
192.168.0.1
服务器B:
添加隧道
sudo ip tunnel add test_tunnel mode gre local 192.168.1.2 remote 192.168.0.1 ttl 255
sudo ip addr add 10.0.2.2/30 dev test_tunnel
sudo ip link set test_tunnel up
sudo echo '101 test_tunnel_GRE' >> /etc/iproute2/rt_tables
/sbin/ip rule add from 10.0.2.0/30 table test_tunnel_GRE
/sbin/ip route add default via 10.0.2.1 dev test_tunnel table test_tunnel_GRE
测试隧道 IP 以 ping 并查看是否有响应(有效)。
[root@B~]# ping -c4 10.0.2.1
PING 10.0.2.1 (10.0.2.1) 56(84) bytes of data.
64 bytes from 10.0.2.1: icmp_seq=1 ttl=64 time=51.7 ms
64 bytes from 10.0.2.1: icmp_seq=2 ttl=64 time=50.0 ms
64 bytes from 10.0.2.1: icmp_seq=3 ttl=64 time=50.0 ms
64 bytes from 10.0.2.1: icmp_seq=4 ttl=64 time=50.0 ms
--- 10.0.2.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3054ms
rtt min/avg/max/mdev = 50.023/50.458/51.721/0.746 ms
在服务器上测试应该会看到隧道服务器 IP:(有效)
[root@B~]# curl http://www.cpanel.net/showip.cgi --interface 10.0.2.2
192.168.0.1
问题出在这里:
为 eth0 添加 IP:
ip a a 192.168.0.1/32 dev eth0
/sbin/ip rule add from 192.168.0.1 table test_tunnel_GRE
破碎的
现在两端都出现问题,两台服务器上的 ping 和 curl 均无法响应。
我感谢任何可以帮助我解决这个问题的信息!