Hôm nay mình sẽ làm seri bài giới thiệu bài về mongodb. Bài viết chủ yếu từ document trên trang chủ của nó (cái này mình viết là để note lại thôi nên chắc cũng không có gì đặc sắc lắm đâu :D )
1. MongoDB là gì? -> Open-sourced document database cung cấp high performance, high availibility, automatic scaling. (Mấy cái này DB này cũng chém như nhau, nhìn tới quen mắt luôn)
- High performance? -> Tại nó hỗ trợ embedded data model (cái này mình sẽ giới thiệu sau) giảm được I/O trên hệ thống. Hỗ trợ Index giúp query nhanh hơn.
- High Availability? -> có hỗ trợ replicate: automatic failover, data redundancy.
- Automatic Scaling? -> có horizontal scalability (nói đơn giản là dữ liệu của nó có thể phình to ra nhiều nhiều bao nhiều cũng được!??), nó làm bằng cách nào? đơn giản là "automatic sharding" phân tán dữ liệu trên các máy cluster (cái này giải thích sao nhá)
2. Tại sao là document database? -> Vì cấu trúc dữ liệu được tạo thành từ cặp field (trường) và value (giá trị). document ở đây gần giống với JSON object. Giá trị của field có thể bao gồm nhiều document khác, hoặc mảng của nhiều document khác.
Ví dụ, một document có dạng như sau:
{
name: "duy",
age: 24,
status: "single"
groups: ["male", "handsome"]
}
Lợi ích của document là gì? -> Cái này thì mình chưa hiểu rõ nữa, nên sẽ copy-paste nhá, từ từ mà ngâm
- Documents (i.e. objects) correspond to native data types in many programming languages.
- Embedded documents and arrays reduce need for expensive joins.
- Dynamic schema supports fluent polymorphism.
Monday, 10 March 2014
apt-get & apt-cache usage
What is apt-get?
The apt-get utility is a powerful and free package management command line program, that is used to work with Ubuntu’s APT (Advanced Packaging Tool) library to perform installation of new software packages, removing existing software packages, upgrading of existing software packages and even used to upgrading the entire operating system.
What is apt-cache?
The apt-cache command line tool is used for searching apt software package cache. In simple words, this tool is used to search software packages, collects information of packages and also used to search for what available packages are ready for installation on Debian or Ubuntubased systems.
APT-CACHE – 5 Useful Basic Commands
1. How Do I List All Available Packages?
To list all the available packages, type the following command.
$ apt-cache pkgnames
esseract-ocr-epo pipenightdreams mumudvb tbb-examples libsvm-java libmrpt-hmtslam0.9 libboost-timer1.50-dev kcm-touchpad g++-4.5-multilib ...
2. How Do I Find Out Package Name and Description of Software?
To find out the package name and with it description before installing, use the ‘search‘ flag. Using “search” with apt-cache will display a list of matched packages with short description. Let’s say you would like to find out description of package ‘vsftpd‘, then command would be.
$ apt-cache search vsftpd
vsftpd - lightweight, efficient FTP server written for security ccze - A robust, modular log coloriser ftpd - File Transfer Protocol (FTP) server yasat - simple stupid audit tool
To find and list down all the packages starting with ‘vsftpd‘, you could use the following command.
$ apt-cache pkgnames vsftpd
vsttpd
3. How Do I Check Package Information?
For example, if you would like to check information of package along with it short description say (version number, check sums, size, installed size, category etc). Use ‘show‘ sub command as shown below.
$ apt-cache show netcat
Package: netcat Priority: optional Section: universe/net Installed-Size: 30 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Ruben Molina <rmolina@udea.edu.co> Architecture: all Version: 1.10-40 Depends: netcat-traditional (>= 1.10-39) Filename: pool/universe/n/netcat/netcat_1.10-40_all.deb Size: 3340 MD5sum: 37c303f02b260481fa4fc9fb8b2c1004 SHA1: 0371a3950d6967480985aa014fbb6fb898bcea3a SHA256: eeecb4c93f03f455d2c3f57b0a1e83b54dbeced0918ae563784e86a37bcc16c9 Description-en: TCP/IP swiss army knife -- transitional package This is a "dummy" package that depends on lenny's default version of netcat, to ease upgrades. It may be safely removed. Description-md5: 1353f8c1d079348417c2180319bdde09 Bugs: https://bugs.launchpad.net/ubuntu/+filebug Origin: Ubuntu
4. How Do I Check Dependencies for Specific Packages?
Use the ‘showpkg‘ sub command to check the dependencies for particular software packages. whether those dependencies packages are installed or not. For example, use the ‘showpkg‘ command along with package-name.
$ apt-cache showpkg vsftpd
Package: vsftpd Versions: 2.3.5-3ubuntu1 (/var/lib/apt/lists/in.archive.ubuntu.com_ubuntu_dists_quantal_main_binary-i386_Packages) Description Language: File: /var/lib/apt/lists/in.archive.ubuntu.com_ubuntu_dists_quantal_main_binary-i386_Packages MD5: 81386f72ac91a5ea48f8db0b023f3f9b Description Language: en File: /var/lib/apt/lists/in.archive.ubuntu.com_ubuntu_dists_quantal_main_i18n_Translation-en MD5: 81386f72ac91a5ea48f8db0b023f3f9b Reverse Depends: ubumirror,vsftpd harden-servers,vsftpd Dependencies: 2.3.5-3ubuntu1 - debconf (18 0.5) debconf-2.0 (0 (null)) upstart-job (0 (null)) libc6 (2 2.15) libcap2 (2 2.10) libpam0g (2 0.99.7.1) libssl1.0.0 (2 1.0.0) libwrap0 (2 7.6-4~) adduser (0 (null)) libpam-modules (0 (null)) netbase (0 (null)) logrotate (0 (null)) ftp-server (0 (null)) ftp-server (0 (null)) Provides: 2.3.5-3ubuntu1 - ftp-server Reverse Provides:
5. How Do I Check statistics of Cache
The ‘stats‘ sub command will display overall statistics about the cache. For example, the following command will display Total package names is the number of packages have found in the cache.
$ apt-cache stats
Total package names: 51868 (1,037 k) Total package structures: 51868 (2,490 k) Normal packages: 39505 Pure virtual packages: 602 Single virtual packages: 3819 Mixed virtual packages: 1052 Missing: 6890 Total distinct versions: 43015 (2,753 k) Total distinct descriptions: 81048 (1,945 k) Total dependencies: 252299 (7,064 k) Total ver/file relations: 45567 (729 k) Total Desc/File relations: 81048 (1,297 k) Total Provides mappings: 8228 (165 k) Total globbed strings: 286 (3,518 ) Total dependency version space: 1,145 k Total slack space: 62.6 k Total space accounted for: 13.3 M
APT-GET – 20 Useful Basic Commands for Package Management
6. How to Update System Packages
The ‘update‘ command is used to resynchronize the package index files from the their sources specified in /etc/apt/sources.list file. The update command fetched the packages from their locations and update the packages to newer version.
$ sudo apt-get update
[sudo] password for tecmint: Ign http://security.ubuntu.com quantal-security InRelease Get:1 http://security.ubuntu.com quantal-security Release.gpg [933 B] Get:2 http://security.ubuntu.com quantal-security Release [49.6 kB] Ign http://in.archive.ubuntu.com quantal InRelease Ign http://in.archive.ubuntu.com quantal-updates InRelease Get:3 http://repo.varnish-cache.org precise InRelease [13.7 kB] Ign http://in.archive.ubuntu.com quantal-backports InRelease Hit http://in.archive.ubuntu.com quantal Release.gpg Get:4 http://security.ubuntu.com quantal-security/main Sources [34.8 kB] Get:5 http://in.archive.ubuntu.com quantal-updates Release.gpg [933 B] ...
7. How to Upgrade Software Packages
The ‘upgrade‘ command is used to upgrade all the currently installed software packages on the system. Under any circumstances currently installed packages are not removed or packages which are not already installed neither retrieved and installed to satisfy upgrade dependencies.
$ sudo apt-get upgrade
Reading package lists... Done Building dependency tree Reading state information... Done The following packages have been kept back: linux-headers-generic linux-image-generic wine1.5 wine1.5-i386 The following packages will be upgraded: activity-log-manager-common activity-log-manager-control-center adium-theme-ubuntu alacarte alsa-base app-install-data-partner appmenu-gtk appmenu-gtk3 apport apport-gtk apt apt-transport-https apt-utils aptdaemon aptdaemon-data at-spi2-core bamfdaemon base-files bind9-host ...
However, if you want to upgrade, unconcerned of whether software packages will be added or removed to fulfill dependencies, use the ‘dist-upgrade‘ sub command.
$ sudo apt-get dist-upgrade
8. How Do I Install or Upgrade Specific Packages?
The ‘install‘ sub command is tracked by one or more packages wish for installation or upgrading.
$ sudo apt-get install netcat
Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: netcat-traditional The following NEW packages will be installed: netcat netcat-traditional 0 upgraded, 2 newly installed, 0 to remove and 328 not upgraded. Need to get 67.1 kB of archives. After this operation, 186 kB of additional disk space will be used. Do you want to continue [Y/n]? y Get:1 http://in.archive.ubuntu.com/ubuntu/ quantal/universe netcat-traditional i386 1.10-40 [63.8 kB] Get:2 http://in.archive.ubuntu.com/ubuntu/ quantal/universe netcat all 1.10-40 [3,340 B] Fetched 67.1 kB in 1s (37.5 kB/s) Selecting previously unselected package netcat-traditional. (Reading database ... 216118 files and directories currently installed.) Unpacking netcat-traditional (from .../netcat-traditional_1.10-40_i386.deb) ... Selecting previously unselected package netcat. Unpacking netcat (from .../netcat_1.10-40_all.deb) ... Processing triggers for man-db ... Setting up netcat-traditional (1.10-40) ... Setting up netcat (1.10-40) ...
9. How I can Install Multiple Packages?
You can add more than one package name along with the command in order to install multiple packages at the same time. For example, the following command will install packages ‘nethogs‘ and ‘goaccess‘.
$ sudo apt-get install nethogs goaccess
Reading package lists... Done Building dependency tree Reading state information... Done goaccess is already the newest version. nethogs is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 328 not upgraded.
10. How to Install Several Packages using Wildcard
With the help of regular expression you can add several packages with one string. For example, we use * wildcard to install several packages that contains the ‘*name*‘ string, name would be ‘package-name’.
$ sudo apt-get install '*name*'
11. How to install Packages without Upgrading
Using sub ‘–no-upgrade‘ command will prevent already installed packages from upgrading.
$ sudo apt-get install packageName --no-upgrade
Reading package lists... Done Building dependency tree Reading state information... Done Skipping vsftpd, it is already installed and upgrade is not set. 0 upgraded, 0 newly installed, 0 to remove and 328 not upgraded.
12. How to Upgrade Only Specific Packages
The ‘–only-upgrade‘ command do not install new packages but it only upgrade the already installed packages and disables new installation of packages.
$ sudo apt-get install packageName --only-upgrade
Reading package lists... Done Building dependency tree Reading state information... Done vsftpd is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 328 not upgraded.
13. How Do I Install Specific Package Version?
Let’s say you wish to install only specific version of packages, simply use the ‘=‘ with the package-name and append desired version.
$ sudo apt-get install vsftpd=2.3.5-3ubuntu1
Reading package lists... Done Building dependency tree Reading state information... Done vsftpd is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 328 not upgraded.
14. How Do I Remove Packages Without Configuration
To un-install software packages without removing their configuration files (for later re-use the same configuration). Use the ‘remove‘ command as shown.
$ sudo apt-get remove vsftpd
[sudo] password for tecmint: Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: vsftpd 0 upgraded, 0 newly installed, 1 to remove and 328 not upgraded. After this operation, 364 kB disk space will be freed. Do you want to continue [Y/n]? y (Reading database ... 216156 files and directories currently installed.) Removing vsftpd ... vsftpd stop/waiting Processing triggers for ureadahead ... Processing triggers for man-db ...
15. How Do I Completely Remove Packages
To remove software packages including their configuration files, use the ‘purge‘ sub command as shown below.
$ sudo apt-get purge vsftpd
Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: vsftpd* 0 upgraded, 0 newly installed, 1 to remove and 328 not upgraded. After this operation, 0 B of additional disk space will be used. Do you want to continue [Y/n]? y (Reading database ... 216107 files and directories currently installed.) Removing vsftpd ... Purging configuration files for vsftpd ... Processing triggers for ureadahead ...
Alternatively, you can combine both the commands together as shown below.
$ sudo apt-get remove --purge vsftpd
Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: vsftpd* 0 upgraded, 0 newly installed, 1 to remove and 328 not upgraded. After this operation, 364 kB disk space will be freed. Do you want to continue [Y/n]? y (Reading database ... 216156 files and directories currently installed.) Removing vsftpd ... vsftpd stop/waiting Purging configuration files for vsftpd ... Processing triggers for ureadahead ... Processing triggers for man-db ...
16. How I Can Clean Up Disk Space
The ‘clean‘ command is used to free up the disk space by cleaning retrieved (downloaded).deb files (packages) from the local repository.
$ sudo apt-get clean
17. How Do I Download Only Source Code of Package
To download only source code of particular package, use the option ‘–download-only source‘ with ‘package-name’ as shown.
$ sudo apt-get --download-only source vsftpd
Reading package lists... Done Building dependency tree Reading state information... Done Need to get 220 kB of source archives. Get:1 http://in.archive.ubuntu.com/ubuntu/ quantal/main vsftpd 2.3.5-3ubuntu1 (dsc) [1,883 B] Get:2 http://in.archive.ubuntu.com/ubuntu/ quantal/main vsftpd 2.3.5-3ubuntu1 (tar) [188 kB] Get:3 http://in.archive.ubuntu.com/ubuntu/ quantal/main vsftpd 2.3.5-3ubuntu1 (diff) [30.5 kB] Fetched 220 kB in 4s (49.1 kB/s) Download complete and in download only mode
18. How Can I Download and Unpack a Package
To download and unpack source code of a package to a specific directory, type the following command.
$ sudo apt-get source vsftpd
Reading package lists... Done Building dependency tree Reading state information... Done Need to get 220 kB of source archives. Get:1 http://in.archive.ubuntu.com/ubuntu/ quantal/main vsftpd 2.3.5-3ubuntu1 (dsc) [1,883 B] Get:2 http://in.archive.ubuntu.com/ubuntu/ quantal/main vsftpd 2.3.5-3ubuntu1 (tar) [188 kB] Get:3 http://in.archive.ubuntu.com/ubuntu/ quantal/main vsftpd 2.3.5-3ubuntu1 (diff) [30.5 kB] Fetched 220 kB in 1s (112 kB/s) gpgv: Signature made Thursday 24 May 2012 02:35:09 AM IST using RSA key ID 2C48EE4E gpgv: Can't check signature: public key not found dpkg-source: warning: failed to verify signature on ./vsftpd_2.3.5-3ubuntu1.dsc dpkg-source: info: extracting vsftpd in vsftpd-2.3.5 dpkg-source: info: unpacking vsftpd_2.3.5.orig.tar.gz dpkg-source: info: unpacking vsftpd_2.3.5-3ubuntu1.debian.tar.gz dpkg-source: info: applying 01-builddefs.patch dpkg-source: info: applying 02-config.patch dpkg-source: info: applying 03-db-doc.patch dpkg-source: info: applying 04-link-local.patch dpkg-source: info: applying 05-whitespaces.patch dpkg-source: info: applying 06-greedy.patch dpkg-source: info: applying 07-utf8.patch dpkg-source: info: applying 08-manpage.patch dpkg-source: info: applying 09-s390.patch dpkg-source: info: applying 10-remote-dos.patch dpkg-source: info: applying 11-alpha.patch dpkg-source: info: applying 09-disable-anonymous.patch dpkg-source: info: applying 12-ubuntu-use-snakeoil-ssl.patch
19. How Can I Download, Unpack and Compile a Package
You can also download, unpack and compile the source code at the same time, using option ‘–compile‘ as shown below.
$ sudo apt-get --compile source goaccess
[sudo] password for tecmint: Reading package lists... Done Building dependency tree Reading state information... Done Need to get 130 kB of source archives. Get:1 http://in.archive.ubuntu.com/ubuntu/ quantal/universe goaccess 1:0.5-1 (dsc) [1,120 B] Get:2 http://in.archive.ubuntu.com/ubuntu/ quantal/universe goaccess 1:0.5-1 (tar) [127 kB] Get:3 http://in.archive.ubuntu.com/ubuntu/ quantal/universe goaccess 1:0.5-1 (diff) [2,075 B] Fetched 130 kB in 1s (68.0 kB/s) gpgv: Signature made Tuesday 26 June 2012 09:38:24 AM IST using DSA key ID A9FD4821 gpgv: Can't check signature: public key not found dpkg-source: warning: failed to verify signature on ./goaccess_0.5-1.dsc dpkg-source: info: extracting goaccess in goaccess-0.5 dpkg-source: info: unpacking goaccess_0.5.orig.tar.gz dpkg-source: info: unpacking goaccess_0.5-1.debian.tar.gz dpkg-buildpackage: source package goaccess dpkg-buildpackage: source version 1:0.5-1 dpkg-buildpackage: source changed by Chris Taylor <ctaylor@debian.org> dpkg-buildpackage: host architecture i386 dpkg-source --before-build goaccess-0.5 dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 9) autotools-dev libncurses5-dev libglib2.0-dev libgeoip-dev autoconf dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting dpkg-buildpackage: warning: (Use -d flag to override.) ...
20. How Do I Download a Package Without Installing
Using ‘download‘ option, you can download any given package without installing it. For example, the following command will only download ‘nethogs‘ package to current working directory.
$ sudo apt-get download nethogs
Get:1 Downloading nethogs 0.8.0-1 [27.1 kB] Fetched 27.1 kB in 3s (7,506 B/s)
21. How Do I Check Change Log of Package?
The ‘changelog‘ flag downloads a package change-log and shows the package version that is installed.
$ sudo apt-get changelog vsftpd
vsftpd (2.3.5-3ubuntu1) quantal; urgency=low * Merge from Debian testing (LP: #1003644). Remaining changes: + debian/vsftpd.upstart: migrate vsftpd to upstart. + Add apport hook (LP: #513978): - debian/vsftpd.apport: Added. - debian/control: Build-depends on dh-apport. - debian/rules: Add --with apport. + Add debian/watch file. + debian/patches/09-disable-anonymous.patch: Disable anonymous login by default. (LP: #528860) * debian/patches/12-ubuntu-us-snakeoil-ssl.patch: Use snakeoil SSL certificates and key. -- Andres Rodriguez <andreserl@ubuntu.com> Wed, 23 May 2012 16:59:36 -0400 ...
22. How Do I Check Broken Dependencies?
The ‘check‘ command is a diagnostic tool. It used to update package cache and checks for broken dependencies.
$ sudo apt-get check
[sudo] password for tecmint: Reading package lists... Done Building dependency tree Reading state information... Done
23. How Do I Search and Build Dependencies?
This ‘build-dep‘ command searches the local repositories in the system and install the build dependencies for package. If the package does not exists in the local repository it will return an error code.
$ sudo apt-get build-dep netcat
The following NEW packages will be installed: debhelper dh-apparmor html2text po-debconf quilt 0 upgraded, 5 newly installed, 0 to remove and 328 not upgraded. Need to get 1,219 kB of archives. After this operation, 2,592 kB of additional disk space will be used. Do you want to continue [Y/n]? y Get:1 http://in.archive.ubuntu.com/ubuntu/ quantal/main html2text i386 1.3.2a-15build1 [91.4 kB] Get:2 http://in.archive.ubuntu.com/ubuntu/ quantal/main po-debconf all 1.0.16+nmu2ubuntu1 [210 kB] Get:3 http://in.archive.ubuntu.com/ubuntu/ quantal/main dh-apparmor all 2.8.0-0ubuntu5 [9,846 B] Get:4 http://in.archive.ubuntu.com/ubuntu/ quantal/main debhelper all 9.20120608ubuntu1 [623 kB] Get:5 http://in.archive.ubuntu.com/ubuntu/ quantal/main quilt all 0.60-2 [285 kB] Fetched 1,219 kB in 4s (285 kB/s) ...
24. How I Can Auto clean Apt-Get Cache?
The ‘autoclean‘ command deletes all .deb files from /var/cache/apt/archives to free-up significant volume of disk space.
$ sudo apt-get autoclean
Reading package lists... Done Building dependency tree Reading state information... Done
25. How I Can Auto remove Installed Packages?
The ‘autoremove‘ sub command is used to auto remove packages that were certainly installed to satisfy dependencies for other packages and but they were now no longer required. For example, the following command will remove an installed package with its dependencies.
$ sudo apt-get autoremove vsftpd
Reading package lists... Done Building dependency tree Reading state information... Done Package 'vsftpd' is not installed, so not removed 0 upgraded, 0 newly installed, 0 to remove and 328 not upgraded.
Monday, 3 March 2014
2 default routes
1. Đặt vấn đề:
Giả sử ta có 2 NIC kết nối mạng, ta muốn đến host A bằng eth0, còn lại đi bằng eth1. Vậy ta phải làm sao?
Trường hợp khác, ta cũng có 2 NIC kết nối mạng, từ một host A, ta ping đến interface eth0, ta muốn kết quả trả về phải đi bằng interface eth1. Dĩ nhiên packet này sẽ bị router trung gian drop. Nhưng trong vài trường hợp thì ta cần mô phỏng tương tự như vậy.
Vậy ta phải làm sao?
2. Config 2 default route
Với advanced routing, bạn có thể có nhiều routing table. Trong ví dụ sau, chúng ta thêm đường DSL line từ ISP gọi là "cheapskate".
Đầu tiên, chúng ta cần phải đặt tên cho routing table mới này.
root@host# echo 2 cheapskate > /etc/iproute2/rt_tables
Như đã đề cập ở trên, câu lệnh ip route thực ra chỉ là viết gọn lại của ip route show table main.
Vì thế để show ra routing table mới, ta phải sử dụng câu lệnh sau:
root@host# ip route show table cheapskate
Vì table mới được tạo nên sẽ không show ra thông tin gì cho ta hết (:
Việc cần thiết bây giờ là là add thêm default route vào bảng cheapskate -- table main cũ sẽ tiếp xử lí phần còn lại. Đây là thông tin bảng routing main.
root@host# ip route show table main
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.10
default via 192.168.1.1 dev eth0
Ta sẽ add default route mới cho table cheapskate như sau:
root@host# ip route add default via 192.168.2.1 dev eth1 table cheapskate
root@host# ip route show table cheapskate
default via 192.168.2.1 dev eth1
Table cheapskate chỉ chứa một dòng,nhưng nó chưa được sử dụng, vì nó chưa được kích hoạt lên, để hiển thị các rule được kích hoạt ta dùng lệnh sau:
root@host# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Routing table chỉ định đích đến của gói tin, nhưng bây giờ ta cần kernel sử dụng những routing table khác dựa trên source address của nó. Lúc này ta cần phải add thêm rule mới như sau:
root@host# ip rule add from 192.168.2.10 lookup cheapskate prio 1000
Lệnh này thêm một rule khi có một gói tin đến với pattern là 192.168.2.10, trong trường hợp này routing cheapskate được sử dụng với priority là 1000. Trong ví dụ này pattern chỉ match với một địa chỉ address, nhưng ta có thể thiết lập nhiều pattern trong Linux router để match nhiều tập địa chỉ khác nhau.
Check lại, ta thấy kết quả:
root@host# ip rule
0: from all lookup local
1000: from 192.168.2.10 lookup cheapskate
32766: from all lookup main
32767: from all lookup default
Kernel tìm tất cả các tập rule với priority thấp nhất, xử lí từng routing table cho đến khi gói tin được chuyển một cách thành công.
Trong tập rule mặc định luôn có table local với pattern match all. Table local (priority 0) xử lí tất cả các gói tin được xem như trên localhost cũng như broadcast.
** Warnings **
Khi làm nhiều hơn 1 routing table, không bao giờ được quên add thêm phần table trong câu lệnh. Nếu quên, những rule thay đổi sẽ được apply lên table main có thể dẫn đến ảnh hưởng không kiểm soát được. Khi thực hiện từ xa, những thay đổi sai có thể dẫn đến mất kết nối, tốt nhất nên thực hiện trên console.
Một trong những điều quan trong cần chú ý là route được cached lại. Nói cách khác khi ta update routing table và thấy không có gì thay đổi. Giải pháp đơn giản chỉ là flush cache đó đi:
root@host# ip route flush table cache
Giả sử ta có 2 NIC kết nối mạng, ta muốn đến host A bằng eth0, còn lại đi bằng eth1. Vậy ta phải làm sao?
Trường hợp khác, ta cũng có 2 NIC kết nối mạng, từ một host A, ta ping đến interface eth0, ta muốn kết quả trả về phải đi bằng interface eth1. Dĩ nhiên packet này sẽ bị router trung gian drop. Nhưng trong vài trường hợp thì ta cần mô phỏng tương tự như vậy.
Vậy ta phải làm sao?
2. Config 2 default route
Với advanced routing, bạn có thể có nhiều routing table. Trong ví dụ sau, chúng ta thêm đường DSL line từ ISP gọi là "cheapskate".
Đầu tiên, chúng ta cần phải đặt tên cho routing table mới này.
root@host# echo 2 cheapskate > /etc/iproute2/rt_tables
Như đã đề cập ở trên, câu lệnh ip route thực ra chỉ là viết gọn lại của ip route show table main.
Vì thế để show ra routing table mới, ta phải sử dụng câu lệnh sau:
root@host# ip route show table cheapskate
Vì table mới được tạo nên sẽ không show ra thông tin gì cho ta hết (:
Việc cần thiết bây giờ là là add thêm default route vào bảng cheapskate -- table main cũ sẽ tiếp xử lí phần còn lại. Đây là thông tin bảng routing main.
root@host# ip route show table main
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.10
default via 192.168.1.1 dev eth0
Ta sẽ add default route mới cho table cheapskate như sau:
root@host# ip route add default via 192.168.2.1 dev eth1 table cheapskate
root@host# ip route show table cheapskate
default via 192.168.2.1 dev eth1
Table cheapskate chỉ chứa một dòng,nhưng nó chưa được sử dụng, vì nó chưa được kích hoạt lên, để hiển thị các rule được kích hoạt ta dùng lệnh sau:
root@host# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Routing table chỉ định đích đến của gói tin, nhưng bây giờ ta cần kernel sử dụng những routing table khác dựa trên source address của nó. Lúc này ta cần phải add thêm rule mới như sau:
root@host# ip rule add from 192.168.2.10 lookup cheapskate prio 1000
Lệnh này thêm một rule khi có một gói tin đến với pattern là 192.168.2.10, trong trường hợp này routing cheapskate được sử dụng với priority là 1000. Trong ví dụ này pattern chỉ match với một địa chỉ address, nhưng ta có thể thiết lập nhiều pattern trong Linux router để match nhiều tập địa chỉ khác nhau.
Check lại, ta thấy kết quả:
root@host# ip rule
0: from all lookup local
1000: from 192.168.2.10 lookup cheapskate
32766: from all lookup main
32767: from all lookup default
Kernel tìm tất cả các tập rule với priority thấp nhất, xử lí từng routing table cho đến khi gói tin được chuyển một cách thành công.
Trong tập rule mặc định luôn có table local với pattern match all. Table local (priority 0) xử lí tất cả các gói tin được xem như trên localhost cũng như broadcast.
** Warnings **
Khi làm nhiều hơn 1 routing table, không bao giờ được quên add thêm phần table trong câu lệnh. Nếu quên, những rule thay đổi sẽ được apply lên table main có thể dẫn đến ảnh hưởng không kiểm soát được. Khi thực hiện từ xa, những thay đổi sai có thể dẫn đến mất kết nối, tốt nhất nên thực hiện trên console.
Một trong những điều quan trong cần chú ý là route được cached lại. Nói cách khác khi ta update routing table và thấy không có gì thay đổi. Giải pháp đơn giản chỉ là flush cache đó đi:
root@host# ip route flush table cache
Subscribe to:
Posts (Atom)