作者 主題: 來源IP可以路由嗎?  (閱讀 5149 次)

0 會員 與 1 訪客 正在閱讀本文。

a01876

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
來源IP可以路由嗎?
« 於: 2011-01-27 23:54 »
各位先進好
 
小弟有一台 3 張網卡的 Linux host 當閘道 router,其路由表已設定如下:
第 1 張網卡 eth0 接通 192.168.1.0/24,是我服務單位的內部網路。
第 2 張網卡 eth1 接到 VPN Virtual IP 網段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),連往各分公司。
第 3 張網卡 eth2 接到 Internet。
 
這種路由分配平常皆相安無事,內外網上網愉快。但問題來了,我內部有一台特殊機器(192.168.1.100)「必需」把所有的路由/封包都導到 eth1 上面去(原因和技術無關,所以就不多說了),也就是不可以由 eth2 出去(所有192.168.1.0/24 的 IP 都可由 eth2 出去、但 192.168.1.100 這一台全部要走 eth1)
 
顯然這必需在 3 網卡 Linux host 上動手腳,請問該如何做呢?或是這是不可能的任務?
謝謝!
 
PS:實在對不起,我只是一般 user,懂 route 指令、不太懂 ip 及 iptables 指令


aknine

  • 懷疑的國中生
  • **
  • 文章數: 47
    • 檢視個人資料
回覆: 來源IP可以路由嗎?
« 回覆 #1 於: 2011-01-28 06:17 »
各位先進好
 
小弟有一台 3 張網卡的 Linux host 當閘道 router,其路由表已設定如下:
第 1 張網卡 eth0 接通 192.168.1.0/24,是我服務單位的內部網路。
第 2 張網卡 eth1 接到 VPN Virtual IP 網段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),連往各分公司。
第 3 張網卡 eth2 接到 Internet。
 
這種路由分配平常皆相安無事,內外網上網愉快。但問題來了,我內部有一台特殊機器(192.168.1.100)「必需」把所有的路由/封包都導到 eth1 上面去(原因和技術無關,所以就不多說了),也就是不可以由 eth2 出去(所有192.168.1.0/24 的 IP 都可由 eth2 出去、但 192.168.1.100 這一台全部要走 eth1)


所有192.168.1.0/24 的 IP 都可由 eth2 出去、但 192.168.1.100 這一台全部要走 eth1

就這敘述,應該就是不允許192.168.1.100連上Internet吧,這不是考題吧,敘述也繞得太大圈了吧 

因為routing是正常的,所以用Iptables就可以了。
如果你的iptables 沒有做特別的-j REDIRECT用這個就可以了
代碼: [選擇]
iptables -t mangle -I FORWARD -i eth0 -s 192.168.1.100 -o eth2 -j DROP(為何能這樣做的原因和技術無關,所以就不多說了)




kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
I am kenduest - 小州

my website: http://kenduest.sayya.org/

a01876

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
回覆: 來源IP可以路由嗎?
« 回覆 #3 於: 2011-01-28 08:39 »
aknine 大大您猜錯囉~~

我還是說一下原因好了, 因為這台機器要到(eth1)遙遠的 300 公里外的分公司 mapping 到一個固定 real IP, 而其它機器只需上網, 所以就從 local 的 eth2 出去囉, 為何不在 eth2 mapping ?? 因為沒有固定的 real IP~~~

另外謝謝小州兄, 惠我良多, 看樣子要 study 一下 ip 指令了~~~



就這敘述,應該就是不允許192.168.1.100連上Internet吧,這不是考題吧,敘述也繞得太大圈了吧 

因為routing是正常的,所以用Iptables就可以了。
如果你的iptables 沒有做特別的-j REDIRECT用這個就可以了
代碼: [選擇]
iptables -t mangle -I FORWARD -i eth0 -s 192.168.1.100 -o eth2 -j DROP

aknine

  • 懷疑的國中生
  • **
  • 文章數: 47
    • 檢視個人資料
回覆: 來源IP可以路由嗎?
« 回覆 #4 於: 2011-01-28 17:05 »
aknine 大大您猜錯囉~~

我還是說一下原因好了, 因為這台機器要到(eth1)遙遠的 300 公里外的分公司 mapping 到一個固定 real IP, 而其它機器只需上網, 所以就從 local 的 eth2 出去囉, 為何不在 eth2 mapping ?? 因為沒有固定的 real IP~~~


如果你是用RedHat系列的Linux, 可採用以下做法
在 3 NIC的Linux上.
vim /etc/iproute2/rt_tables
加入
代碼: [選擇]
100 remote_site
vim /etc/sysconfig/network-scripts/route-eth0
加入
代碼: [選擇]
default via <eth1所連到遠端的IP> table remote_site
vim /etc/sysconfig/network-scripts/rule-eth0
加入
代碼: [選擇]
from 192.168.1.100/32 table remote_site
最後下指令讓設定生效
代碼: [選擇]
service network restart
另外 遠端的Server要幫192.168.1.100做 SNAT (假設 eth0是那server的Internet nic)
代碼: [選擇]
iptables -t nat -I POSTROUTING -s 192.168.1.100 -o eth0 -j SNAT --to <real_ip>
就可以了.以上做法,讓192.168.1.100 走遠端的Real IP出去. (注意,是出去, 不是連進來)
(假設遠端的gatway認得192.168.1.0/24的網路)


a01876

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
回覆: 來源IP可以路由嗎?
« 回覆 #5 於: 2011-01-29 09:49 »

搞定囉!!
多謝 aknine 及小州兄兩位前輩協助~~  ^_^




vim /etc/iproute2/rt_tables
加入
代碼: [選擇]
100 remote_site
vim /etc/sysconfig/network-scripts/route-eth0
加入
代碼: [選擇]
default via <eth1所連到遠端的IP> table remote_site
vim /etc/sysconfig/network-scripts/rule-eth0
加入
代碼: [選擇]
from 192.168.1.100/32 table remote_site
最後下指令讓設定生效
代碼: [選擇]
service network restart

a01876

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
回覆: 來源IP可以路由嗎?
« 回覆 #6 於: 2011-02-08 15:05 »
各位前輩好
 
我是原 po,過年期間小弟「很用力」的讀了 Advanced Routing HOWTO 等文件(多謝 netman 板大的翻譯),內容真是精彩,這些 Linux kernel hacker 實在太厲害了~~
不過,我沒能實作出我要的一個機制 :(~
 
問題如下:(要先看第 1 篇 post 的架構喔~)

單位內 Linux Router:
eth1 以 VPN 方式連往分公司,頻寬極低
eth2 以 pppoe 方式連往 Internet,頻寬高很多
很顯然我在做網管時會希望無關內部溝通的封包儘量跑 eth2。

Mail 及 DNS server 在遙遠的分公司那裡(為何不在單位內部架設?這不是我能決定的,設定我也不能去管或去動),所有同仁的電腦都經由 Linux router 頻寬低的 eth1 去詢問 DNS 及收發 Mail。

DNS server:會依據查詢者不同 IP(VPN 及 Internet)將 Mail server 的查詢解析成不同的內外 IP。
Mail server:內部 IP support smtp 及 pop3,Internet IP 不 support smtp。

我希望:收信時由 Internet(eth2)收下,送信時由 VPN(eth1)寄出,可減緩 eth1 的擁塞。

實作1:用封包標記
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 110 -j MARK --set-mark 1
ip rule add fwmark 1 table pop3only
ip route add default via 192.168.254.37 dev eth2 table pop3only
失敗了,因為內部用戶只能拿到 mail server 的內部 IP

實作2:用 nat
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 1.2.3.4  --dport 110 -j DNAT --to 5.6.7.8:110
(1.2.3.4:mail server 內部 IP、5.6.7.8:mail server 外部 IP)

也失敗了,port 110 流量還是跑 eth1,原因不太了解~~

在不異動 mail 及 DNS server 的設定,也不異動用戶端設定的情形下,如何達到所要的機制?
謝謝~~


dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
回覆: 來源IP可以路由嗎?
« 回覆 #7 於: 2011-02-08 23:59 »
實作2:用 nat
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 1.2.3.4  --dport 110 -j DNAT --to 5.6.7.8:110
(1.2.3.4:mail server 內部 IP、5.6.7.8:mail server 外部 IP)

也失敗了,port 110 流量還是跑 eth1,原因不太了解~~
理當可行
前提是 , 試試 linux 上 traceroute mail server 外部 IP
若受 VPN 路由干擾 , static route 吧


另外有趣的嘗試
1. eth2 ip 搞個 MX , 可能 25 port 都能走 internet
2. mail server 前端要是沒 firewall + ISP 無檢測來源封包 ... 等干擾
25 port 出 internet 別 nat 成 public ip
有可能達成 eth2 出去 vpn 回來

a01876

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
回覆: 來源IP可以路由嗎?
« 回覆 #8 於: 2011-02-10 22:52 »
理當可行
前提是 , 試試 linux 上 traceroute mail server 外部 IP
若受 VPN 路由干擾 , static route 吧


另外有趣的嘗試
1. eth2 ip 搞個 MX , 可能 25 port 都能走 internet
2. mail server 前端要是沒 firewall + ISP 無檢測來源封包 ... 等干擾
25 port 出 internet 別 nat 成 public ip
有可能達成 eth2 出去 vpn 回來


多謝 dark 前輩賜教~~  ^_^

原來 mail server 的前端還有 mailgw,過濾信件用的。
把 mailgw 的內外 IP 也加入 DNAT 就 OK 囉~~(分流如下圖)
eth2 IP 搞 MX 對我有些難,可能需要潛水研究,等有成果後再回來報告囉~~