Centos
僅為某些主機通過私有 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、ssh 等)。他們也都可以完全訪問網際網路,並且可以通過這種方式訪問
伺服器 1
這是一個ip a
# ip一個 1: lo: man 65536 qdisc noqueue state UNKNOWN 連結/環回 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 永遠首選_lft 永遠 2: eth0: mtu 1500 qdisc pfifo_fast state 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 永遠首選_lft 永遠 3:eth1:mtu 1500 qdisc pfifo_fast state 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 永遠首選_lft 永遠
這是一個ip路由
# 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
這是一個sysctl -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 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 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 帶入等式之前,我已向伺服器 2 添加了一個測試 IP(8.8.8.8)以測試它是否有效
這是一個ip
# ip一個 1: lo: man 16436 qdisc noqueue state UNKNOWN 連結/環回 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 永遠首選_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 永遠首選_lft 永遠 3: eth1: mtu 1500 qdisc mq state 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 永遠首選_lft 永遠
這是一個ip路由
# ip路由 8.8.8.8 通過 10.0.64.10 開發 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, offset 0, flags [DF], proto ICMP (1), length 84) 10.0.64.150 > 8.8.8.8:ICMP 回應要求,id 17999,seq 1,長度 64 11:25:56.609262 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 10.0.64.150 > 8.8.8.8:ICMP 回應要求,id 17999,seq 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, offset 0, flags [DF], proto ICMP (1), length 84) 10.0.64.150 > 8.8.8.8:ICMP 回應要求,id 17999,seq 86,長度 64 11:27:21.608738 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 10.0.64.150 > 8.8.8.8:ICMP 回應要求,id 17999,seq 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, offset 0, flags [DF], proto ICMP (1), length 84) 10.0.64.150 > 8.8.8.8:ICMP 回應要求,id 17999,seq 190,長度 64 11:29:05.608800 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 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 替換為可從兩台伺服器訪問的另一台伺服器,並且發生了同樣的事情。
我願意接受任何建議 - 我非常困惑:)
在此先感謝,伊恩
這解決了!
我的 IPTables 規則集中缺少以下規則:
iptables -t nat -I POSTROUTING 1 -o eth0 --jump MASQUERADE