n2n內網穿透打洞部署全過程 + nginx公網端口映射

內網穿透、打洞工具有很多,此前在windows上使用的是vidcc這個玩意,也正因為linux不支持。自此在linux嘗試過一些打洞工具,ssh 反向代理這些,因為安全性不便捷等多種原因,最終選擇了n2n。

?

由于初次接觸n2n,對其不是很了解,就此對n2n實現內網穿透打洞過程進行基本表述。

?

2008年,ntop的作者Luca Deri開始研究p2p V**,他一方面看到公眾對p2p V**有著強烈的需求,另一方面又不滿足已有產品的現狀,于是n2n誕生了。

?

?

?

如上圖所示,n2n是一個二層架構的V**網絡,其中super node提供場所,讓兩個位于NAT/防火墻之后的edge node進行會面,一旦雙方完成首次握手,剩下的數據流就之發生在兩個edge node之間,如果有一方的NAT屬于對稱型(symmetrical),super node則還需繼續為雙方提供數據包的轉發;edge node負責數據流的加解密,原理很簡單。

?

至此,我們已經了解,部署n2n至少需要兩臺以上的機器。

?

我們此文采用兩臺centos。

?

centos7(super node) - 150.0.0.1 (公網IP)

?

centos 7(edge node)- 192.168.1.121 (虛擬機內網IP)

?

使用n2n產生的虛擬網段,將為 10.0.0.1 ~ 10.0.0.255

?

安裝n2n

?

無論是edgenode還是supernode 都需要安裝n2n,所以下面安裝方法通用,提供兩種n2n資源,均可。

?

git clone https://github.com/meyerd/n2n.git

?

or

?

svn co https://svn.ntop.org/svn/ntop/trunk/n2n

?

n2n分為v1和v2版本,兩種協議互不兼容。我們選擇v2版本。

?

cd n2n/n2n_v2

?

安裝openssl、cmake、git、gcc、net-

?

yum install -y openssl-devel
yum install -y cmake
yum install -y net-tools
yum install -y git
yum install -y gcc gcc-c++

?

編譯安裝n2n

?

mkdir build
cd build
cmake ..
make && make install

?

n2n編譯安裝完,會產生兩個程序指令,edge 和 supernode,欠著是邊緣節點使用(客戶端),后者則是超級節點使用(服務端)。

?

supernode(服務端運行)

?

supernode -l 5000

?

超級節點開啟5000端口進行監聽,以此來提供建交服務。

?

服務端也可以同時當做客戶端使用,將服務端加入到虛擬網絡中。

?

edge -a 10.0.0.10 -c edge0 -k wss -l 150.0.0.1:5000

?

edgenode(客戶端運行)

?

edge -a 10.0.0.11 -c edge0 -k wss -l 150.0.0.1:5000

?

10.0.0.11 這個IP是虛擬網段,其他加入虛擬網絡中的IP地址需要在同一網段,統一key,即wss(可設置為其他)。

?

?

?

此節點已有10.0.0.11這個IP,所在的是n2n創建的虛擬網卡,kill 掉edge 進程則此網卡銷毀。

?

查看edge或者supernode 進程

?

ps -ef|grep supernodeps -ef|grep edge

?

--help

?

?

?

本文提到的重要參數

?

-k wss 通訊私匙,一般不用放在supernode節點,可自行約定edge節點的私匙統一設置。

?

-M 1200 設置mtu

?

-v -f 開啟調試輸出

?

調試

?

使用過程中不免遇到一些奇葩的事,調試是個關鍵,一些大的坑已經為你們踩過了,剩下的基本沒啥問題。

?

1.開啟調試模式

?

記住先kill掉之前的edge 或 supernode進程再進行調試以免沖突。

?

附加參數即可: -v -f

?

edge

?

edge -a 10.0.0.11 -c edge0 -k wss -l 150.0.0.1:5000 -v -f

?

supernode

?

supernode -l 5000 -v -f

?

2.正常使用,節點互相連接不通。

?

如果ping都不通,懷疑是防火墻的問題?測試請先直接關閉防火墻。完畢后,將其恢復,慢慢測試。

?

防火墻放行端口示例:

?

iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
iptables -I INPUT -p udp --dport 5000 -j ACCEPT
iptables save
service iptables restart

?

?

?

2.創建了客戶端,虛擬網卡沒有ip

?

?

?

如果你開啟調試模式了,可能就會看到原來是ifconfig 命令不存在,這個命令在net-tools包里(centos),那么就需要安裝,重新開啟edge即可解決。

?

安裝net-tools

?

yum install -y net-tools

?

手動設置網卡IP(可省略,測試可以使用)

?

ifconfig edge0 10.0.0.11  netmask 255.255.255.0

?

那么,如果這步不成功的話,自然網絡沒有配置建立好,也就無法正常穿透內網。此時如果不開啟調試模式,你也看不到任何錯誤,也就是很多人往往出現的配置好了,卻無法正常訪問,ping都不通,何以解憂。

?

3.ping能通,http和ssh卻不通。

?

設置mtu值即可

?

edge -a 10.0.0.11 -c edge0 -k wss -l 150.0.0.1:5000 -M 1200

?

一般低于1400即可,當前設置1200。(不要忘了kill之前的進程哦)

?

至此,問題基本得以解決。

?

測試

?

10.0.0.10 (supernode、edge) 10不僅是超級節點也是邊緣節點。

?

10.0.0.11(edge)無數邊緣節點中其中一個

?

10 ping 11

?

?

?

11 ping 10

?

?

?

自此,網絡可以互相訪問,暢通無阻。如果你用你自己的電腦,需要將其加入到虛擬網絡中,即可像局域網一樣訪問。

?

windows edge客戶端軟件

?

http://www.V**hosting.cz/n2nguien.exe

?

http://sourceforge.net/projects/n2nedgegui/

?

還要其他版本以及安卓版本,自行搜捕。

?

nginx轉發端口代理映射

?

最后,我們將用nginx轉發下公網IP端口到內網指定ip指定端口,這樣可以讓外界不加入虛擬網絡即可訪問其中的節點機器。

?

用戶客戶端 =》 公網IP(150.0.0.1:6011)=》虛擬內網(10.0.0.11:22)

?

從流程來看,我們的用戶將訪問公網IP的6011端口,可以連接到內網機器10.0.0.11的22端口(ssh)。

?

首先關閉防火墻或放行公網6011端口連接

?

vi /etc/sysconfig/iptables

?

增加

?

-A INPUT -p tcp -m state --state NEW -m tcp --dport 6011 -j ACCEPT

?

?

?

安裝nginx(supernode)

?

詳細請參照此文

?

注意需要轉發tcp數據,編譯時附加參數:--with-stream

?

#安裝編譯支持庫
mkdir /mnt/tools -p
cd /mnt/tools
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++#安裝PCRE
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
tar -xzf pcre-8.40.tar.gz -C ./
cd pcre-8.40
./configure --prefix=/usr/local/pcre
make && make install
cd ..#安裝zlib
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xzf zlib-1.2.11.tar.gz -C ./
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make && make install
cd ..#安裝openss
wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
tar -xzf openssl-1.0.2k.tar.gz -C ./
#注意,這里不需要進行安裝,后面步驟省略。#編譯安裝nginx
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -xzf nginx-1.12.0.tar.gz  -C ./
cd nginx-1.12.0./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/mnt/tools/pcre-8.40/ \
--with-zlib=/mnt/tools/zlib-1.2.11/ \
--with-openssl=/mnt/tools/openssl-1.0.2k/ \
--with-stream#注:cpre、zlib、openssl等依賴包的路徑是解壓的源碼路徑不是安裝后的路徑。make
make install

?

編譯安裝完畢后,到nginx目錄。

?

cd /usr/local/nginx/

?

編輯配置nginx.conf

?

stream {log_format proxy '$remote_addr [$time_local] ''$protocol $status $bytes_sent $bytes_received ''$session_time "$upstream_addr" ''"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';access_log /var/log/nginx/tcp-access.log proxy ;open_log_file_cache off;include /usr/local/nginx/conf.d/*.stream;
}

?

創建日志目錄

?

mkdir /var/log/nginx/

?

創建模塊配置目錄并進入

?

mkdir /usr/local/nginx/conf.d/
cd /usr/local/nginx/conf.d/

?

新建tcp.stream文件(vi tcp.stream)

?

upstream TCP6011 {hash $remote_addr consistent;server 10.0.0.11:22;}server {listen 6011;proxy_connect_timeout 5s;proxy_timeout 300s;proxy_pass TCP6011;}

?

重載nginx

?

cd ..

?

./nginx -s reload

?

使用putty連接 150.0.0.1:6011 成功連接10.0.0.11

?

?

?

因為是nginx代理請求,所以來源是10.0.0.10而不是直接客戶端。所以流量也會全部走supernode服務器而不直接交互。如果本地也配置到虛擬網絡,即建立連接通過supernode,之后則直接互通。

?

詳細請了解n2n官方,這個項目已經不在維護,但依然在廣泛使用。

?

http://www.ntop.org/n2n/

?

https://sourceforge.net/projects/ntop/files/n2n/

?

https://www.buckhill.co.uk/blog/how-to-enable-broadcast-and-multicast-support-on-amazon-aws-ec2/2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386612.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows下快速刪除上萬個文件和子目錄

為什么會慢 如果直接在Windows文件管理器里刪除的話(通過菜單或者鍵盤Del或者ShiftDel),刪除這個數量的文件需要大概10幾分鐘,具體根據文件數量目錄層次不同耗時不同。這么慢是因為在刪除之前系統有個準備階段,在這個階…

終于有人把安卓程序員必學知識點全整理出來了,BAT大廠面試總結

行業激烈變化時,恰恰是機會最多的時候 坦白講,許多人骨子里害怕變化和競爭。 其實大可不必。 一來,怕也沒用嘛。二來,變化越快,組合要素增加了,意味著新的工作機會越多。 就像傳統媒體VS新媒體。 放在…

c#反混淆工具de4dot 一般混淆都可以解決

c#反混淆工具de4dot 一般混淆都可以解決 使用方法: 1、CMD 打開 De4Dot 所在文件夾 最好是以管理員身份運行CMD 2、輸入 De4Dot C:\Users\muzigaiyu\Desktop\demo.exe 回車 成功后會在軟件所在文件夾生成 demo-cleaned.exe 在用dotpeek 或者其他軟件打開exe即可看…

餐廳點餐系統:測試與部署

項目測試與部署 1.系統測試 項目調試完成后,將項目打包成war包放入tomcat/wabapps文件夾,本機啟動tomcat,redis緩存,mysql數據庫等服務,本機訪問localhost:8080/BookFood,測試系統的各個功能是否…

SpringCloud與Seata分布式事務初體驗

在本篇文章中我們在SpringCloud環境下通過使用Seata來模擬用戶購買商品時由于用戶余額不足導致本次訂單提交失敗,來驗證下在MySQL數據庫內事務是否會回滾。 本章文章只涉及所需要測試的服務列表以及Seata配置部分。 用戶提交訂單購買商品大致分為以下幾個步驟&…

想學IT的必看!今年Android面試必問的這些技術面,架構師必備技能

第一次觀看我文章的朋友,可以關注、點贊、轉發一下,每天分享各種干貨技術和程序猿趣事 前言 職場的金三銀四跳槽季又來了,不同的是今年比往年「冷」一些,形式更加嚴峻一些,大家多多少少可能都聽到或看到一些信息&…

springboot集成redis使用redis作為session報錯ClassNotFoundException類RememberMeServices

springboot 集成redis使用redis作為緩存,會報錯的問題。 錯誤信息: java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration.taskSchedulerat org.springframew…

阿里巴巴分布式事務利器Seata環境準備

阿里巴巴自從跟SpringCloud共同發起創建微服務開源社區時,開啟了SpringCloud Alibaba分支,而且在生態內提供了一款適用于分布式應用程序(Dubbo、SpringCloud等)的事務框架Seata,該框架經過多個大版本的發布&#xff0c…

對于‘敲什么都隊’自主開發的《校園服務》軟件的使用體驗

信1805-1 邊信哲 20183694 在六月十三日我系組織的2017級軟件工程交流大會中,我為第十一組敲什么都隊’自主開發的《校園服務》軟件投出了我的一票,在為數眾多的校園服務類軟件中,《校園服務》最吸引我的地方就是他們的軟件能完成數據…

阿里P7大牛親自教你!BAT這種大廠履歷意味著什么?積累總結

金九銀十過后各大網絡平臺都是各種面經分享,包括已收offer,或面試失敗的都有,相信大部分人都拿到了自己心儀的大廠offer,不過也有沒有少數沒能進到自己內心向往的大廠而懊惱的,那么到底如何才能進大廠,該準…

啟動mac版docker自帶的k8s

最近準備好好學習下k8s,為了圖方便,直接使用docker集成的k8s,但是網上找了一些教程但都沒能一次性成功,只好自己從頭跑一遍,順手寫個教程可以方便有類似需求的同學參考。 話不多說,直接上步驟。 1.下載doc…

yum安裝mysql

在CentOS7中默認安裝有MariaDB,這個是MySQL的分支,但為了需要,還是要在系統中安裝MySQL,而且安裝完成之后可以直接覆蓋掉MariaDB。 1. 下載并安裝MySQL官方的 Yum Repository 1[rootBrianZhu /]# wget -i -c http://dev.mysql.com…

springboot很多以來jar包是在外部當時候,如何打dockerfile到阿里云

首先保證springboot與各種jar包文件夾在同一目錄 dockerfile如下內容 FROM frolvlad/alpine-oraclejdk8 VOLUME /usr/cloud ADD lib /lib/ ADD lib_attachment /lib_attachment/ ADD lib_bigdata /lib_bigdata/ ADD lib_bpm /lib_bpm/ ADD lib_deploy /lib_deploy/ ADD lib_el…

阿里P7大牛手把手教你!一眼就能看懂的Android自學手冊,真香!

前言 曾聽過很多人說Android學習很簡單,做個App就上手了,工作機會多,畢業后也比較容易找工作。這種觀點可能是很多Android開發者最開始入行的原因之一。 在工作初期,工作主要是按照業務需求實現App頁面的功能,按照設…

【VScode】使用VScode 來寫markdown時序圖

準備工作在VScode中下載插件Markdown Preview Enhanced插件創建一個.md文件在VScode中打開文件,界面內點擊右鍵可以看到Open preview to the side(還有很多方法外面都能搜到),可以進行實時預覽效果開始markdown第一行主標題(次標題依次加#&am…

阿里P7大牛整理!BAT大廠面試基礎題集合,成功入職字節跳動

都說大廠面試必問源碼,可很多人看完MMKV 源碼、Handler 源碼、Binder 源碼、OkHttp 源碼等源碼記不住,是腦子有問題嗎?當然不是!是因為你沒有掌握學習源碼的技巧。 我的朋友子路,很多人都叫他路神,稱他為“…

大項目之網上書城(八)——數據庫大改添加圖書

目錄 大項目之網上書城(八)——數據庫大改&添加圖書主要改動1.數據庫新增表代碼2.數據庫新增觸發器3.其他對BookService和BookDao的修改代碼4.addBook.jsp代碼效果圖5.AddNewBookServlet代碼大項目之網上書城(八)——數據庫大…

hping3工具DOS攻擊實驗

需要兩臺機器,一臺扮演攻擊源,另一做目標源。 攻擊源地址:10.0.40.4 被攻擊機器地址:10.0.40.246 2 被攻擊的機器上安裝tcpdump,tcpdump主要是用來抓包的,看看網絡數據包是否到達。 $ yum install tcpdump -y 3 首先開啟tcp…

騰訊T2親自講解!搞懂開源框架設計思想真的這么重要嗎?系列篇

Java相關 無論什么級別的Android從業者,Java作為Android開發基礎語言。不管是工作還是面試中,Java都是必考題。如果不懂Java的話,薪酬會非常吃虧(美團尤為重視Java基礎) 詳細介紹了Java泛型、注解、并發編程、數據傳…

解決Docker容器內訪問宿主機MySQL數據庫服務器的問題

懶得描述太多,總歸是解決了問題,方法簡要記錄如下,雖然簡要,但是完整,一來紀念處理該問題耗費的大半天時間,二來本著共享精神幫助其他遇到該問題的哥們兒,當然這個方法并不一定能解決你們的問題,但是多少能提供些解決思路. 第一,先檢查防火墻,通常應該沒什么問題 (問題解決之后…