iptables轉(zhuǎn)發(fā)tcp/udp端口請求
前言
路由轉(zhuǎn)發(fā)是計算機網(wǎng)絡中的一種重要概念,特別是在網(wǎng)絡設備和系統(tǒng)之間。它涉及到如何處理和傳遞數(shù)據(jù)包,以及決定數(shù)據(jù)包應該發(fā)送到哪個網(wǎng)絡設備或路由表中的哪條路徑,iptables是本文主要應用的軟件技術。12
本文主要介紹以下幾個情況的配置:
- 本機端口轉(zhuǎn)發(fā)到本機其它端口
- 本機端口轉(zhuǎn)發(fā)到其它機器
本文所描述技術可以應用的幾種場景:
- 本地服務器搭建samba共享文件夾,掛載到云服務器
- 本地服務器搭建gitlab服務器,掛載到云服務器
- 本地搭建的其它服務器掛載到云服務指定端口
一、路由轉(zhuǎn)發(fā)涉及點
路由轉(zhuǎn)發(fā)涉及到以下幾個方面:
- 路由表:這是網(wǎng)絡中用于確定數(shù)據(jù)包應該發(fā)送到哪個物理網(wǎng)絡或下一個路由器的表。路由表通常包含有關到達不同網(wǎng)絡的目標地址的信息,例如下一跳路由器、路徑權重等。
- 數(shù)據(jù)包轉(zhuǎn)發(fā):當一個路由器收到一個數(shù)據(jù)包時,它會根據(jù)其路由表確定如何將該數(shù)據(jù)包發(fā)送到下一個路由器或目標網(wǎng)絡。這可以通過直接將數(shù)據(jù)包發(fā)送到下一個路由器或通過另一個路由器(即鏈路)轉(zhuǎn)發(fā)來實現(xiàn)。
- 數(shù)據(jù)包過濾:路由器通常還具有過濾機制,用于確定哪些數(shù)據(jù)包應該被轉(zhuǎn)發(fā)到下一個路由器,哪些應該被丟棄或被拒絕。這可能涉及到諸如防火墻規(guī)則、病毒防護或訪問控制列表等安全功能。
路由轉(zhuǎn)發(fā)的過程通常由路由器硬件和軟件協(xié)同完成,并且受到網(wǎng)絡拓撲、路由協(xié)議(如靜態(tài)路由、動態(tài)路由等)以及網(wǎng)絡流量等因素的影響。
路由轉(zhuǎn)發(fā)是計算機網(wǎng)絡中網(wǎng)絡設備之間傳遞數(shù)據(jù)包的關鍵過程,它涉及到如何確定數(shù)據(jù)包的下一跳位置以及如何處理和傳遞數(shù)據(jù)包以到達最終目的地。
二、轉(zhuǎn)發(fā)如何配置
測試網(wǎng)站:3
docker run --rm --name web1 --publish 8080:8080 nigelpoulton/web
修改/etc/sysctl.conf文件,讓包轉(zhuǎn)發(fā)功能在系統(tǒng)啟動時自動生效:
# 啟動當前設備的包轉(zhuǎn)發(fā)功能,增加下邊這句
net.ipv4.ip_forward = 1
使用sudo sysctl -p
應用修改
本機端口轉(zhuǎn)發(fā)到本機其它端口
將網(wǎng)內(nèi)其它設備訪問本IP的 9000 端口轉(zhuǎn)發(fā)到 8080端口,同網(wǎng)段內(nèi)其它設備可以通過9000端口訪問服務。
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 9000 -j REDIRECT --to-port 8080
$ curl 192.168.1.66:9000
# Out put
<html><head><title>Docker Rocks</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/></head><body><div class="container"><div class="jumbotron"><h1>Hello Docker learners!!!</h1><p>Be careful. The last time I updated the packages in this app was April 2020.</p><p> </p></div></div></body></html>
將本機訪問本機的 9000 端口轉(zhuǎn)發(fā)到 8080端口,本機可以通過 9000端口訪問服務。
sudo iptables -t nat -A OUTPUT -p tcp --dport 9000 -j REDIRECT --to-port 8080
curl 192.168.1.66:9000
# Out put
<html><head><title>Docker Rocks</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/></head><body><div class="container"><div class="jumbotron"><h1>Hello Docker learners!!!</h1><p>Be careful. The last time I updated the packages in this app was April 2020.</p><p> </p></div></div></body></html>
修改后的路由表如下:
$ sudo iptables -t nat -nL --line
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
2 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 redir ports 8080
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
2 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 redir ports 8080
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
2 MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:8080
Chain DOCKER (2 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
2 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.2:8080
本機端口轉(zhuǎn)發(fā)到其它機器
將網(wǎng)內(nèi)其它設備訪問本IP的 9000 端口轉(zhuǎn)發(fā)到另一臺機器的 8080端口,同網(wǎng)段內(nèi)其它設備可以通過9000端口訪問服務。
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.66:8080
$ sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.66 --dport 8080 -j SNAT --to-source 192.168.1.85
# 如果配置上述兩個后還是上不了網(wǎng),請檢查filter FORWARD表
$ sudo iptables -nvL
# Out put,這里可以看到默認配置是丟棄
Chain FORWARD (policy DROP 813 packets, 42988 bytes)
# 修改對應網(wǎng)卡為接受
$ ip a
# Out put, 這里看到對應網(wǎng)卡為enp1s0
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether ec:d6:8a:fa:c2:91 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.85/24 brd 192.168.1.255 scope global dynamic noprefixroute enp1s0
valid_lft 65632sec preferred_lft 65632sec
$ sudo iptables -A FORWARD -o enp1s0 -j ACCEPT
修改后的路由表如下:
$ sudo iptables -t nat -nL --line
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:192.168.1.66:8080
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 SNAT tcp -- 0.0.0.0/0 192.168.1.66 tcp dpt:8080 to:192.168.1.85
$ sudo iptables -t filter -nvL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain FORWARD (policy DROP 813 packets, 42988 bytes)
num pkts bytes target prot opt in out source destination
1 52 5506 ACCEPT all -- * enp1s0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
三、固化iptables
這里只記錄一種比較簡單的方式,還有其它方式可以自行搜索。
$ sudo apt-get install iptables-persistent
/etc/iptables$ tree -f
# 打印輸出,可以看到這里多了一個/etc/iptables的文件夾
.
├── ./rules.v4
└── ./rules.v6
如果需要更新調(diào)用下邊的命令:
# 保存ipv4路由信息
$ sudo iptables-save -f /etc/iptables/rules.v4
# 保存ipv6路由信息
$ sudo ip6tables-save -f /etc/iptables/rules.v6
如果需要重啟恢復初始路由或卸載,使用下邊命令:
$ sudo apt-get remove iptables-persistent
$ sudo rm -rf /etc/iptables/
總結(jié)
如果是云服務器,對應上述情況建立ip轉(zhuǎn)發(fā)即可,例如samba轉(zhuǎn)發(fā)tcp 445 139端口,udp 137 138端口,通過iptables -p
參數(shù)切換udp/tcp。4567
-
debian/ubuntu/windows配置wiregurad內(nèi)網(wǎng)服務器(包含掉線自啟動) ??
-
iptables配置NAT實現(xiàn)端口轉(zhuǎn)發(fā)與ss命令的講解 ??
-
如何建立并使用docker ??
-
Linux iptables 防火墻軟件命令詳解 ??
-
在Linux上打開端口 ??
-
linux查看服務器開放的端口和啟用的端口五種方式 ??文章來源:http://www.zghlxwxcb.cn/news/detail-771319.html
-
利用iptables實現(xiàn)端口轉(zhuǎn)發(fā) ??文章來源地址http://www.zghlxwxcb.cn/news/detail-771319.html
到了這里,關于【讓云服務器更靈活】iptables轉(zhuǎn)發(fā)tcp/udp端口請求的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!