現有雙網卡的ubuntu串連內外兩個網
外網網卡eth0, 網段 192.168.63.0
內網網卡eth1, 網段 10.147.9.0
目標,內網其他裝置如10.147.9.70可以訪問外網的裝置如192.168.63.1
首先要設定雙網卡同時使用
$ sudo vim /etc/network/interfaces
內容如下
auto lo
iface lo inet loopback
iface eth1 inet static
address 10.147.9.250
netmask 255.255.0.0
gateway 10.147.9.1
auto eth1
注,其中外網段似乎是在gnome裡設的,所以沒有提及,具體有待研究。
此時內外網基本聯通
在內網其他裝置如 10.147.9.70上邊增加一條臨時路由,重啟後失效
windows這樣設
route add 192.168.63.0 mask 255.255.255.0 10.147.9.250
如果是永久性設定
route add -p 192.168.63.0 mask 255.255.255.0 10.147.9.250
linux 臨時路由添加
route add -net 192.168.63.0 netmask 255.255.255.0 gateway 10.147.9.250
ubuntu 永久靜態路由添加
$sudo vim /etc/rc.local
route add -net 192.168.63.0 netmask 255.255.255.0 gateway 10.147.9.250
把上面這句加到exit 0 上邊就行
意思是說所有發往192.168.63這個網段的地址全部先發往10.147.9.250
而不是系統原來的預設閘道10.147.9.1
從10.147.9.70 ping 10.147.9.250 通
從10.147.9.70 ping 192.168.63.50 (同一裝置的外網卡地址) 通
從10.147.9.70 ping 192.168.63.1 外網網關 不通
從10.147.9.250 ping 10.147.9.70 通
從192.168.63.50 ping 192.168.63.1 通
參考了很多資料, 說iptables可以實驗橋接器或路由的轉寄功能
具體操作如下:
開啟ipv4的轉寄功能
2個地方要改
$ sudo vim /etc/sysctl.conf
把下面這句的#號去掉
#net.ipv4.ip_forward=1
還有
$ sudo vim /proc/sys/net/ipv4/ip_forward
把0改成1
然後運行下列命令iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
然後測試從10.147.9.70 ping 192.168.63.1通了,慶祝一下
還有個問題,就是關機以後不能儲存設定,就是說再次開機要再次運行上邊4條命令
研究了一下午,終於搞定。
把上邊4條命令加到開機自動啟動並執行指令碼裡面即可。
這也是Ubuntu的小竅門
$sudo vim /etc/rc.local
把上邊四條命令加到
exit 0 上邊就行
短短一篇文章, 好長時間的探索,拿出來跟大家分享,我是從別人那裡學到的經驗,也把經驗分享給更多的人,讓大家少走彎路。
續:
其實這就是個橋接器轉寄的例子
內網與外網通過一個雙網卡的伺服器相連
當內網訪問一個外網的地址是,它把請求發到了網關的內網網卡上,iptablesd再通過另一個串連外網的網卡把這個請求發到對應的外網伺服器上,完成轉寄。