我遇到了一个奇怪的问题,无法弄清楚 - 所以我希望这里有人可以帮助我。
首先,最终目标是我的网络中的特定服务器运行与另一家公司的 IPSEC 连接,并且我希望所有其他服务器都通过此单个服务器路由该网络上的 IP 流量。
本例中的服务器 1 是运行 IPSEC 连接的服务器。(CentOS 6.6)
本例中的服务器 2 是应用服务器,它仅通过服务器 1 路由特定 IP 的流量。(CentOS 6.5)
下面将使用一些IP:
服务器 1
服务器1公网IP:xxxx 服务器1公开广播:xxxy 服务器1公共网关:xxxz 服务器 1 内部 IP:10.0.64.10/24
服务器 2
服务器 2 公网 IP:yyyy 服务器2公开广播:yyyz 服务器 2 公共网关:yyya 服务器2内部IP:10.0.64.150/24
这些服务器之间具有完全的内部连接(即我可以从一台服务器 ping 到另一台服务器,没有任何问题)。它们还都具有完全的互联网访问权限,可以通过这种方式访问
服务器 1
这是一个知识产权为了那个原因
# IP 地址 1:lo:mtu 65536 qdisc 无队列状态未知 链路/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 范围主机 lo inet6 ::1/128 范围主机 valid_lft 永远 preferred_lft 永远 2:eth0:mtu 1500 qdisc pfifo_fast 状态UP qlen 1000 链接/以太 00:0c:29:99:12:85 brd ff:ff:ff:ff:ff:ff inet xxxx/28 brd xxxy 范围全局 eth0 inet6 xxxx:xxxx:xxxx:xxxx/64 范围链接 valid_lft 永远 preferred_lft 永远 3:eth1:mtu 1500 qdisc pfifo_fast 状态UP qlen 1000 链接/以太 00:0c:29:99:12:8f brd ff:ff:ff:ff:ff:ff inet 10.0.64.10/24 brd 10.0.64.255 范围全局 eth1 inet6 fe80::20c:29ff:fe99:128f/64 范围链接 valid_lft 永远 preferred_lft 永远
这是一个路由
# IP 路由 xxxy/28 dev eth0 proto 内核范围链接 src xxxx 10.0.64.0/24 dev eth1 proto 内核范围链接 src 10.0.64.10 169.254.0.0/16 dev eth0 范围链路度量 1002 169.254.0.0/16 dev eth1 范围链路指标 1003 默认通过 xxxz dev eth0
这里有一个系统控制-p
# sysctl -p net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 内核.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 内核.msgmnb = 65536 内核.msgmax = 65536 内核.shmmax = 68719476736 内核.shmall = 4294967296 net.ipv4.ip_forward = 1 net.ipv6.conf.all.转发 = 1 net.ipv4.conf.default.proxy_arp = 1 net.ipv4.conf.all.rp_filter = 1 内核.sysrq = 1 net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 1
服务器 2
在将 IPSEC 纳入考量之前,我已向服务器二添加了一个测试 IP(8.8.8.8),以测试其是否正常工作
这是一个知识产权
# IP 地址 1:lo:mtu 16436 qdisc 无队列状态未知 链路/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 范围主机 lo inet6 ::1/128 范围主机 valid_lft 永远 preferred_lft 永远 2:eth0:mtu 1500 qdisc mq 状态UP qlen 1000 链接/以太 00:0c:29:15:8b:01 brd ff:ff:ff:ff:ff:ff inet yyyy/29 brd yyyz 范围全局 eth0 inet6 fe80::20c:29ff:fe15:8b01/64 范围链接 valid_lft 永远 preferred_lft 永远 3:eth1:mtu 1500 qdisc mq 状态UP qlen 1000 链接/以太 00:0c:29:15:8b:0b brd ff:ff:ff:ff:ff:ff inet 10.0.64.150/24 brd 10.0.64.255 范围全局 eth1 inet6 fe80::20c:29ff:fe15:8b0b/64 范围链接 valid_lft 永远 preferred_lft 永远
这是一个路由
# IP 路由 8.8.8.8 通过 10.0.64.10 dev eth1 yyyz/29 dev eth0 proto 内核范围链接 src yyyy 10.0.64.0/24 dev eth1 proto 内核范围链接 src 10.0.64.150 默认通过 yyya dev eth0
现在,当我尝试从服务器 2 -> 8.8.8.8 执行 ping 时,以下是来自每个服务器的 tcpdump:
服务器 2
如果我在 eth0 上运行 tcpdump,则不会得到任何匹配项(因此路由显示正确!)。eth1 获得匹配项:
# tcpdump -vvv -i eth1 -n 主机 8.8.8.8 tcpdump:在 eth1 上监听,链接类型 EN10MB(以太网),捕获大小 65535 字节 11:25:55.609902 IP(tos 0x0、ttl 64、id 0、偏移量 0、标志 [DF]、proto ICMP (1)、长度 84) 10.0.64.150 > 8.8.8.8:ICMP 回显请求,id 17999,序号 1,长度 64 11:25:56.609262 IP(tos 0x0、ttl 64、id 0、偏移量 0、标志 [DF]、proto ICMP (1)、长度 84) 10.0.64.150 > 8.8.8.8:ICMP 回显请求,id 17999,序号 2,长度 64
服务器 1(8.8.8.8 的希望网关)
在 eth1 上(私有)
# tcpdump -vv -i eth1 -n 主机 8.8.8.8 tcpdump:在 eth1 上监听,链接类型 EN10MB(以太网),捕获大小 65535 字节 11:27:20.608766 IP(tos 0x0、ttl 64、id 0、偏移量 0、标志 [DF]、proto ICMP (1)、长度 84) 10.0.64.150 > 8.8.8.8:ICMP 回显请求,ID 17999,序列号 86,长度 64 11:27:21.608738 IP(tos 0x0、ttl 64、id 0、偏移量 0、标志 [DF]、proto ICMP(1)、长度 84) 10.0.64.150 > 8.8.8.8:ICMP 回显请求,ID 17999,序列号 87,长度 64
在 eth0 上(公共)
# tcpdump -vv -i eth0 -n 主机 8.8.8.8 tcpdump:在 eth0 上监听,链接类型 EN10MB(以太网),捕获大小 65535 字节 11:29:04.608773 IP(tos 0x0、ttl 63、id 0、偏移量 0、标志 [DF]、proto ICMP (1)、长度 84) 10.0.64.150 > 8.8.8.8:ICMP 回显请求,ID 17999,序列号 190,长度 64 11:29:05.608800 IP(tos 0x0、ttl 63、id 0、偏移量 0、标志 [DF]、proto ICMP (1)、长度 84) 10.0.64.150 > 8.8.8.8:ICMP 回显请求,id 17999,seq 191,长度 64
我已禁用了两者的 FW(作为测试),确保没有任何阻止 FORWARD 流量的规则(作为单独的测试),但我的流量从未从服务器 2 传到 8.8.8.8。我还尝试用可从两台服务器访问的另一台服务器替换 8.8.8.8,但发生了同样的事情。
我愿意接受任何建议——我非常困惑:)
提前致谢,伊恩
答案1
已经解决了!
我的 IPTables 规则集中缺少以下规则:
iptables -t nat -I POSTROUTING 1 -o eth0 --jump MASQUERADE