Linux
Linux

如何在Linux上跨網段指定外部IP位置

#假設你有多個內部網段和多個外部IP

LAN1只使用外部IP#1

LAN2只使用外部IP#2

#內部LAN ---------->外部IP

LAN1 192.168.1.x --> 123.123.123.11

LAN2 192.168.2.x --> 123.123.123.12

基本上,我們想要的不只是對目的位置做路由,而且還要以來源位置做為路由基準.這就是所謂的”策略式路由 “或”來源路由”。這個功能在2.0.x的核心內並未支援,只有在2.2.x的核心並透過IPROUTE2套件才可行,而且它並未內建在新版本使用IPTABLES的2.4.x核心內。

首先你必須了解IPFWADM和IPCHAINS如何在路由系統中影響決定封包往那裏送的原理。這個條件應該要以鮮明的大紅色字眼放在所有IPFWADM/IPCHAINS/IPMASQ的文章裏。理由是使用者的路由設定必須要正確然後才可加入IPFWADM/IPCHAINS等IP偽裝的設定。

這種虛擬的路由的實現,必須透過IPROUTE2。因為這種功能並無關於IPMASQ,所以這並不會對它做更詳盡的闡述。

“iprule”和”iproute”指令與”ip rule”和”ip route”的指令是相同的。
先前的少數幾個指令只需要在開機時執行一次,可以加入到/etc/rc.d/rc.local

#允許內部網路相互做路由,不需偽裝
/sbin/iprule add from 192.168.0.0/16 to 192.168.0.0/16 table main pref 100
#所有經過192.168.1.x外部封包交由表101來處理
/sbin/iprule add from 192.168.1.0/24 to 0/0 table 101 pref 101
#所有經過192.168.2.x外部封包交由表102來處理
/sbin/iprule add from 192.168.2.0/24 to 0/0 table 102 pref 102
以下這些指令必須要在eth0設好時執行,尤其在/etc/sysconfig/network-scripts/ifup-post(for Redhat systems)先手動做一次以確定是可用的。

#強制所有表101內所指定的封包經由123.123.123.11的路徑出去
/sbin/iproute add table 101 via 62123.123.123.11
#強制所有表102內所指定的封包經由123.123.123.12的路徑出去
/sbin/iproute add table 102 via 62123.123.123.12

在這裏你應該會發現從192.168.1.x到外面世界的封包是經過123.123.123.11所路由的,而192.168.2.x則是經123.123.123.12所路由的。

由於路由是正確的,所以現在你可以加上任何IPFWAMD或IPCHAINS的規則上去。以下是IPCHAINS的例子

/sbin/ipchains -A forward -i ppp+ -j MASQ

文:技術支援處