仅为某些主机通过私有 IP 路由流量 - CentOS 6.6

仅为某些主机通过私有 IP 路由流量 - CentOS 6.6

我遇到了一个奇怪的问题,无法弄清楚 - 所以我希望这里有人可以帮助我。

首先,最终目标是我的网络中的特定服务器运行与另一家公司的 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

相关内容