— 写在前

折腾这个的原因:

  1. 公司的没有钱部署自己的本地服务器,而只好用自己的办公电脑同时兼做服务器
  2. 网络为联通直连光纤,且联通线路维护人员拒不提供光猫的超级管理员密码,无法进入光猫设置光猫路由的lan端的端口映射
  3. 公司内部网络的布线决定了,无法将光猫运行模式改为PPPOE,且DDNS的方式也存在不稳定的情况
  4. 国内可以解决此问题的NAT123或是花生壳吃相太难看并且他们提供免费线路限流且极不稳定

使用NGROK解决此问题的前提

  1. 拥有公网IP的独立主机或是VPS
  2. 一定的Linux运维经验,能够熟练使用shell相关命令
  3. 熟悉linux的daemon运行模式,熟悉systemctl或是init.d的相关设置
# 注意我的服务器环境为Debian
# 建立编译操作的临时目录
mkdir ngrok_tmp
cd ngrok_tmp

# 配置和生成NGROK连接验证证书 #
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.domain.com" -days 5000 -out rootCA.pem 
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=ngrok.domain.com" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

# 获取NGROK源码
git clone https://github.com/inconshreveable/ngrok.git

# 为NGROK编译指定证书文件,覆盖NGROK默认的证书文件
cd ngrok
yes | cp ../server.key ./assets/server/tls/snakeoil.key
yes | cp ../server.crt ./assets/server/tls/snakeoil.crt
yes | cp ../rootCA.pem ./assets/client/tls/ngrokroot.crt

make release-server

# 安装 NGROKD (Daemon) 到系统的常用路径PATH下
cp bin/ngrokd /usr/local/bin/

# 添加 NGROKD 服务项,以便自启动和使用service命令来启动和关闭
vim /etc/systemd/system/ngrokd.service


##################################
[Unit]
Description=ngrok service
After=network.target
After=syslog.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ngrokd -domain=ngrok.domain.com -httpAddr 0.0.0.0:9280 -httpsAddr 0.0.0.0:9243  -tunnelAddr 0.0.0.0:9443 -log=/var/log/ngrokd.log -log-level=WARNING
ExecStop=/bin/kill $MAINPID
ExecReload=/bin/kill -USR1 $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target
##################################
# 创建log日志文件,否则ngrokd无法启动
touch /var/log/ngrokd.log

# 将NGROD添加到系统自启动项
systemctl enable ngrokd

# 启动NGROD服务,或是使用service命令也可以
systemctl start ngrokd

# 查看NGROK服务端系统状态,或是使用service命令也可以
systemctl status ngrokd


# 编译客户端 
# 由于我的本地环境为iMAC,因此这里仅编译MAC环境下的客户端
GOOS=darwin GOARCH=amd64 make release-client

scp拷贝编译后的客户端到本地主机上


# 新建NGROK客户端配置文件,注意客户端配置文件为yml格式
vim .ngrok.yml 并写入以下配置项

#################################
server_addr: ngrok.domain.com:9443 # 这里指定客户端要连接的服务端的域名和端口号,4443是默认的监听的端口,可以在服务端进行更改
trust_host_root_certs: false # 这里指定是否验证服务端的证书,如果是从证书机构获取的证书则可以写为true,如果是自己生成的证书这里写为false
tunnels: # 这个配置项是你要开启的通道的配置
    ssh: # ssh是这个通道的名称,可以随意命名
        remote_port: 10039 # 该配置项可以申请远程服务器的固定端口,如果不设置该参数,每次在启动客户端的时候服务端都会随机分配一个端口号
        proto: # 该配置项指明该通道使用哪些协议
            tcp: 80 # 该配置项指明该通道开启本地tcp协议的80端口,即将远程的10039端口转发到本地80端口
#################################

# 创建 ngrok客户端日志文件,你可以根据自己的情况设置别的路径
touch /Users/user-name/Documents/Crons/ngrok.log


# 启动客户端,创建tunnel
/usr/local/bin/ngrok -log=/Users/user-name/Documents/Crons/ngrok.log -log-level=WARNING -config=/Users/nz/.ngrok.yml start-all


# 服务端运行如下提示
ngrok                                                                                                                                        (Ctrl+C to quit)

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    tcp://ngrok.domain.com:10039 -> 127.0.0.1:80
Web Interface                 127.0.0.1:4040
# Conn                        1
Avg Conn Time                 4821.21ms

# 以上输出证明端口映射成功,至此完结撒花

# 有时间考虑进一步研究以下,补齐添加额外tunnel和添加到mac自启动的相关操作

余姓曾字博约,豫南蓼城人。少惇信明义,好朋友喜宾客,国高肄业读于殷南安工,习国际贸易。初到安工,尝与院长争识论知,针砭学院之弊,较计自由之理。虽师国贸,然终日摆弄电脑硬件,研修编程,始于系统安装,终于helloworld。四年大学,修电脑无数,得佳人几无。每遇良师,凝精会神以期知致; 未即否室,直转遁逸。或沐阳光,或归书馆,或游郊野,狂放羁荡以至于斯,终阍然结业,何其幸也。

后七月归宁,得工业仓储国贸销售一职,后三月正职之时,终觉非吾之所愿即去之。归途偶识吾兄璟炎,相谈甚欢,遂效之以任电商客服于瑞东。初到瑞东,每日端坐于电脑之前,静待洋人发问而答。是时拼写错漏,英语浅薄,每检视工作日志,多贻笑大方。时因我之粗漏而多使公司有所损益者,兄亦不较计,每每笑言,此错可改,况吾未有言在先,以至有此,乃我之过,汝可鉴之。有所问必答之,有所惑必解之,多年浮沉未尝见有如兄之无私藏而乐身教者。

电商工作满一年遂驾轻就熟诸事平稳,即起倦厌之心。时瑞东亦有电商开发部门,且与我部同室办公。其部之众多终日静坐寡言少语,闻键盘沓沓之声,见屏幕未解天书,三五日即成精美绝伦之网站,遂惊奇慨叹此神技如隔空取物御笔而书。吾情难自禁而多溢赞其人神工,其人皆哭笑不得,谓我曰非也,盖非汝之所见,听我肺腑之言,戒入此行,呜呼苦焉。吾深不以为然,多求得以拜子元为师,跨入此门。先斩W3C HTML,大破CSS,闪击JS收JQ,围PHP于函数,克MYSQL于JOINS,六月之后小有所成,遂辅子元以兼WEB开发工作。是时,每日皆遇新问题,时时皆需学习新知识,变通从权,临学现卖。初倍爱己之慧明竟如无敌,尝慨然而叹,何难之有,唯手熟尔;后观同好之作,乃觉已之知浅识薄如劣石之于璞玉,彼之妙道善解令我目瞪口呆,始知入行非一日之功,编程之道仰之弥高,钻之弥坚,非谦勤苦修不能得也。至此,终平复静心积跬步垒土丘,然至今里不满百山不十丈,暗笑:何其曰成?今念瑞东之日犹如昨之历历入目,深感怀之。

我本简达放浪之人,自由洒脱惯了,然家中琐事多使我耳塞口滞心倦神疲,高堂有绵绵导教之意,我实无革己奉命之心,即彼此折磨不若早出家门别寻他处生活。时振焕刘琦等同好吾弟华清皆在郑北,遂辞瑞东别父母登车北向。初到郑,饮食器具一无所备,投刘琦处暂住,琦兄不因我困穷而弃我,食同桌寝分榻,月余之后仍无半句拖厌之词,吾实惭愧难当。又半月得城铭电商主管之位,乃徙城东租陋室起灶台而小家始立。