« 傳統吸水拖把使用心得 | 首頁 | iptables / route command notes »
2005年03月29日
Building Linux NAT with MRTG network monitoring
![]() |
只要一台電腦、兩張網卡和簡單的幾個步驟, 就能用 Linux 自製 IP 分享器! 若是功力夠,
還能架起一部媲美高價 IP 分享器的 Linux NAT! 本篇是以 Fedora Core 3 來架設 Linux NAT 的範例, 完成示意圖請點選這裡. |
環境說明:
- ADSL 寬頻網路, 1 個固定 IP
- 裝有兩張網路卡的 PC 乙台
- 作業系統: Fedora Core 3 (取消防火牆設定)
以下設定步驟係依上述環境進行處理, 通用設定過程請連結參考資料.
Step 1: 確認需求套件, 關閉不需要的服務與埠口
- iptables (防火牆、NAT 設置)
- openssh-server (SSH daemon)
- setup (TCPWrapper)
- net-snmp (SNMP daemon)
- mrtg (網路流量監視報表)
- httpd (Web Server)
Linux NAT 機器建議只開放 ssh (TCP Port: 22), 並於 /etc/hosts.deny 設定:
sshd: ALL EXCEPT 192.168.1.
或使用 iptables 設定:
#iptables -A INPUT -d your_public_ip -p tcp --dport 22 -j DROP
只接受 192.168.1 內部網段使用者登入 sshd, 以策安全.
Step 2: Linux 網路設定 (以 eth0 接 LAN, eth1 接 WAN 為例)
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
TYPE=Ethernet/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=your_public_ip
NETMASK=your_netmask
ONBOOT=yes
TYPE=Ethernet/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=your_hostname
GATEWAY=your_gateway (外部 IP 的 GATEWAY)
Step 3: 設定 NAT (SNAT) / DNAT (DMZ、Virtual Server)
設定 NAT
#modprobe ip_nat_ftp
#echo "1" > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j MASQUERADE設立 Virtual Server (轉 port)
#iptables -t nat -A PREROUTING -p tcp -d your_public_ip --dport 80 -j DNAT --to-destination 192.168.1.100:80設立 DMZ 端
#iptables -t nat -A PREROUTING -d your_public_ip -j DNAT --to-destination 192.168.1.100以上可寫入 /etc/rc.d/rc.local 於每次開機時自動執行
Step 4: 設定 Client (以固定 IP 為例)
IP: 192.168.1.1
Netmask: 255.255.255.0
Gateway: 192.168.1.254
DNS: 168.95.1.1該 Client PC 即可透過 Linux NAT 上網.
如不啟用 MRTG 網路流量監視報表, 可不繼續往下閱讀.
Step 5: 設定 / 啟用 snmpd
#vi /etc/snmp/snmpd.conf
將預設內容修改如下:com2sec local localhost public
com2sec mynetwork 192.168.1.0/24 public
group MyRWGroup v1 local
group MyROGroup v1 mynetwork
view all included .1.3.6.1.2.1.1 80
access MyROGroup "" any noauth 0 all none none
access MyRWGroup "" any noauth 0 all all all
syslocation Fedora Core 3
syscontact someone <someone@mail.com.tw>#chkconfig snmpd on
#service snmpd start
Step 6: 設定 / 啟用 mrtg
#mkdir /var/www/html/mymrtg
#cfgmaker --global 'WorkDir: /var/www/html/mymrtg' \
>--global 'Options[_]: bits,growright' \
>--global 'Language: big5' \
>--output /etc/mrtg/mrtg.cfg \
>--ifref=ip \
>192.168.1.254如果 cfgmaker 出現錯誤訊息, 通常是 /etc/snmp/snmpd.conf 設定不正確所致, 建議回到上一步驟仔細檢查 snmpd.conf 的設定內容.
#indexmaker --output /var/www/html/mymrtg/index.html /etc/mrtg/mrtg.cfg
#mrtg /etc/mrtg/mrtg.cfg (重覆執行 3 次)
使用瀏覽器查看 MRTG 網頁: http://192.168.1.254/mymrtg/ (需先啟動 httpd)
請確定 /etc/cron.d/mrtg 或 /etc/crontab 是否有設置每五分鐘自動執行 mrtg, mrtg 報表才會自動更新
參考資料:
--- 2007.04.14 補充:
Posted by Jamyy at 2005年03月29日 16:13
Trackback Pings
TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/64
Comments
我想問如果有一斷真 ip ,
應該怎樣設定呢 ?
因為我找了許多書都找不到答案 .
eth0 : 203.193.23.82 - 203.193.23.94
network 203.193.23.80
gateway = 203.193.23.81
broadcast = 203.193.233.95
eth1: 192.168.222.4
LAN 192.168.222.5 - 192.168.222.254
Server
e.g.
192.168.222.1 Web server port 80 ,443
( want top map to 203.193.233.92 )
192.168.222.2
192.168.222.3
192.168.222.4
多謝指點
Posted by: 輝 at 2005年06月23日 23:51
很抱歉, 關於您的問題, 其實我也沒試過
我會找個時間實驗看看
不曉得虛擬網卡 (eth0:0, eth0:1, eth0:2...)
是否能解決這個問題
您可以先試試看
Posted by: Jamyy at 2005年06月24日 11:08
我期待你的好消息.
其實我已在 /etc/sysconfig/network-scripts/
做了
ifcfg-eth0:01
ifcfg0eth0:02
等東西.
但暫時未用到 其他的真 ip
Posted by: 輝 at 2005年06月24日 11:51
呵呵, 實驗成功囉~
這樣的確是可行的 ^^
Posted by: Jamyy at 2005年06月24日 13:00
請問一張網卡可以嗎?
我第一次接觸本系統...
可以完整的教學一張網卡的設定嗎?
Posted by: 初學者 at 2006年10月22日 19:47
一張網卡也是可行的, 以下是一張網卡的應用實例:
(因為設定方式和本篇大同小異, 恕不詳加說明)
小烏龜、Linux NAT以及其他內部 PC 都接到 Switch Hub
由單張網卡的 Linux PPPoE ADSL 上網, 網卡為: eth0 (內部 IP), ppp0 (外部 IP) → ppp0 於 ppp 撥號上網後產生
設定 Linux NAT (與本篇的差異處):
1. 沒有 eth1 (因為只有一張網卡)
2. 不用設定 /etc/sysconfig/network 裡的 GATEWAY
3. -o eth1 改為 -o ppp0
4. -d your_public_ip 改為 -i ppp0
ps. -o 表示從某張網卡出去的封包; -i 表示從某張網卡進入的封包
至於 Linux 的 PPPoE 撥號方法, 請參考鳥哥的網頁: http://linux.vbird.org/linux_server/redhat6.1/linux_21internet.php
Posted by: Jamyy at 2006年10月23日 15:58
感謝囉!!
小弟我去試看看了~~
Posted by: 初學者 at 2006年10月30日 19:24
小弟我試了...可是我覺得我好像白痴喔!!
都看不太懂ㄝ~~
想說手邊有台淘汰的電腦拿來架設Linux當做IP分享器
可是好像很難ㄝ~~~
希望有高手可以教我完整的教學"一張網卡的設定來架設Linux當做IP分享器"
系統是Fedora Core 3 的
Posted by: 初學者(小雨) at 2006年10月31日 22:43
大哥您好,
我又來了!
之前參照您的vpn實作已經可以連線進來;不過連進來後無法用vpn主機的nat再連出去。
os:fedora 7
eth0:192.168.0.252(對外)
eth1:10.0.0.1(對內)
我參照以上設定,在iptables的POSTROUTING加上
Masquerade If source is 10.0.0.0/24 and output interface is eth0
請問是不是nat哪裡沒設好?
Posted by: andy at 2007年08月01日 10:34
應該是 PPTP VPN Client 的設定問題
請編輯 PPTP Tunnel
"Add default route?" → Via gateway.. 10.0.0.1
"Delete old default route?" → Yes
Posted by: Jamyy at 2007年08月01日 11:59
大哥您好
client 這邊似乎只要用上vpn的路由就不能連線;是不是我nat這裡沒設成功呢?
Posted by: andy at 2007年08月01日 13:17
如果 cat /proc/sys/net/ipv4/ip_forward 是 0 的話
請先 echo 1 > /proc/sys/net/ipv4/ip_forward
並編輯 /etc/sysctl.conf
設定: net.ipv4.ip_forward = 1
請以 iptables -t nat -L -n 確定回應為:
Chain POSTROUTING (policy ACCEPT)
MASQUERADE all -- 10.2.0.0/24 0.0.0.0
若還是不行, 請確定 pptp server 的防火牆:
iptables -L -n
iptables -t nat -L -n
iptables -t mangle -L -n
確定 policy 都是 ACCEPT
再不行, 應該就是 pptp client 設置的問題了
這方面請參考我上一個回應
Posted by: Jamyy at 2007年08月01日 14:10
大哥您好,
基本上訊息都有正確,有個地方不一樣
/sbin/iptables -t nat -L -n
出現
MASQUERADE 0 -- 192.168.0.0/24 0.0.0.0/0
port這裡不是all而是0
檢查webmin
Source ports for masquerading 是any,其餘空白
IPs and ports for SNAT 是default,其餘空白
請問大哥這樣設定是有問題?
感謝
Posted by: andy at 2007年08月01日 14:20
其實 0 就是 all
因為 iptables 版本不同而產生的顯示差異
Posted by: Jamyy at 2007年08月01日 15:02
大哥抱歉,剛測了一下
linux client
設定add default route? via gateway 10.0.0.1可以連的出去!
windows client
是要哪裡設定呢?
感謝
Posted by: andy at 2007年08月01日 16:08
Windows 不需設定
請參考 PPTP 那篇
Posted by: Jamyy at 2007年08月01日 16:10
大哥您好,
剛剛我這裡做了一個測試,如下
NAT/VPN 主機
eth0:192.168.0.252(對外可上網)
eth1:10.0.0.1(內部網路)
default gateway:192.168.0.254
以上大哥提示的設定都有設定
Windows Client主機
網卡:10.0.0.3/gateway:10.0.0.1
(可ping nat 主機的 eth1, eth0 IP;但無法ping到gw:192.168.0.254及外部IP)
這樣無法上網;是不是代表我的NAT架設是沒有成功的?
感謝大哥..^^
Posted by: andy at 2007年08月02日 00:55
你是說單純的 Windows client (非 pptp client)
無法從 linux nat 出去嗎?
這樣的話的確是要檢查一下 linux nat 的設置
Posted by: Jamyy at 2007年08月02日 11:00
大哥午安,
是的,請問大哥nat是只要在防火牆設定iptables的POSTROUTING加上
Masquerade If source is 10.0.0.0/24 and output interface is eth0
這樣就ok嗎?
感謝
Posted by: andy at 2007年08月02日 11:31
午安~~
除了 MASQUERADE 之外, 還要允許 IP FORWARD 喔!
echo 1 > /proc/sys/net/ipv4/ip_forward
如果要每次開機都自動允許 IP FORWARD
可編輯 /etc/sysctl.conf
設定 net.ipv4.ip_forward = 1
Posted by: Jamyy at 2007年08月02日 11:52
大哥感激您的提醒,
我這裡好像測出了問題,想請大哥您指教,
我比較了一下Fedora 5和Fedoar 7的防火牆設定。
後來發現,Fedoar 7的iptables設定表:
Packet filtering(filter)表格的Forwarded packets (FORWARD)這裡是
Reject Always
後來我參照Fedora 5的設定
在Reject Always之上加上了就ok了
Run chain RH-Firewall-1-INPUT Always
請問大哥這樣是正確的嗎?有安全性問題嗎?
感謝
Posted by: andy at 2007年08月02日 12:05
ok....我在這Packet filtering(filter)表格的Forwarded packets (FORWARD)規則調整了一下,似乎比較合理,改成如下
Accept If output interface is eth1
Accept if input interface is eth1
Reject Always
ps eth1 為內網
請大哥再次確認..^^
感激
Posted by: andy at 2007年08月02日 13:21
我的做法是取消系統預設的防火牆
再逐一加入自己想要的 rule
你也可以試試看 :)
Posted by: Jamyy at 2007年08月02日 13:49
感謝大哥回答;
這裡設定似乎改成外網的比較合理
Accept If output interface is eth0
Accept if input interface is eth0
防火牆設定有用webmin重新設定成我們環境的rule,沒有很複雜就開所需要的port進來。
這裡目前測試已經正常也可以上網,但vpn連進來時,可以上網,但無法上msn;這是防火牆設定的問題?
感謝大哥..^^
Posted by: andy at 2007年08月02日 15:06
大哥您好,
NAT/VPN 主機
eth0:192.168.0.252(對外可上網)
eth1:10.0.0.1(內部網路)
Windows Client主機
網卡:10.0.0.3/gateway:10.0.0.1
當我直接透過NAT上網,msn正常;但連結vpn之後,上網正常,但msn無法連結;請問是要把msn的port加進防火牆規則中是嗎?
Posted by: andy at 2007年08月02日 15:22
這似乎不是防火牆的問題
實驗的結果是 msn 無法走 pptp tunnel 來連線
(但 skype 可以)
查了 google 也只得到一個結論:
把 "使用遠端網路的預設閘道" 的打勾拿掉
Posted by: Jamyy at 2007年08月03日 09:40
感謝大哥的回答,了解了!
使用pptpd vpn 並透過 vpn gateway 就無法與 msn 一同使用就是了?
感謝..^^
Posted by: andy at 2007年08月06日 14:20
是的
至少我在 msn 8.1 測試的結果是這樣
Posted by: Jamyy at 2007年08月06日 16:44
