Re: What are port requirements for remote lisp?

Mirko Vukovic <[email protected]> Thu, 2 Apr 2020 08:33:42 -0400
Newsgroups gmane.lisp.slime.devel
Message-ID <CAO73BABuCXVwvx6HmfOEE-Jo-erwTJgiatFTQSFO0ptTwE7vxg@mail.gmail.com>
--000000000000005af205a24e0559
Content-Type: text/plain; charset="UTF-8"

On Thu, Apr 2, 2020 at 7:55 AM Martin Simmons <[email protected]> wrote:

> >>>>> On Wed, 1 Apr 2020 08:59:30 -0400, Mirko Vukovic said:
> >
> > On Tue, Mar 31, 2020 at 11:51 AM Martin Simmons <[email protected]>
> > wrote:
> >
> > > >>>>> On Mon, 30 Mar 2020 21:16:00 -0400, Mirko Vukovic said:
> > > >
> > > > Hello,
> > > >
> > > > My setup is Sly on Spacemacs with Windows 10 running remote lisp on
> Linux
> > > > over a corporate network. I have not found a Sly mailing list, and I
> > > hope I
> > > > can get an answer here.
> > > >
> > > > Emacs is running Sly on Spacemacs on Windows 10. Lisp is running on a
> > > Linux
> > > > server. But Sly does not connect to the listening Lisp. Corporate
> network
> > > > security policies have changed. I can ask for IT to accommodate me,
> but
> > > > first I need to know what to ask for.
> > > >
> > > > So far, I have opened a tunnel, and started a listening lisp (details
> > > > below).
> > > >
> > > > In Emacs I get:
> > > >
> > > > sly-connect RET RET RET
> > > > [sly] Connecting to Slynk on port 4005..
> > > > helm-M-x-execute-command: make client process failed: Connection
> timed
> > > out,
> > > > :name, sly-9, :buffer, nil, :host, hal9000, :service, 4005, :nowait,
> nil,
> > > > :tls-parameters, nil
> > > >
> > > > The session transcript:
> > > > > ssh -L4005:localhost:4005 mirko@hal9000
> > > >
> > > > [mirko@hal9000 .roswell]$ ros -L ccl-bin run --load
> > > start-slynk-server.lisp
> > > >
> > > >  Added SLYNK path to ASDF:*CENTRAL-REGISTRY*
> > > > SLYNK's ASDF loader finished.
> > > >  Loaded ASDF system
> > > > ;; Slynk started at port: 4005.
> > > >
> > > >  Created SLYNK server on port 4005
> > > >  Set *USE-DEDICATED-OUTPUT-STREAM* to NIL
> > > > Clozure Common Lisp Version 1.11.5/v1.11.5  (LinuxX8664)
> > > >
> > > > For more information about CCL, please see http://ccl.clozure.com.
> > > >
> > > > CCL is free software.  It is distributed under the terms of the
> Apache
> > > > Licence, Version 2.0.
> > > > ?
> > > >
> > > > My question is as follows:
> > > >
> > > >    1. Do I need bi-directional traffic on 4005?
> > >
> > > Assuming you are using the ssh tunnel above, then you don't need port
> 4005
> > > traffic on the LAN (it is all hidden in the tunnel).
> > >
> > > The most likely problem is that some firewall on the Windows machine is
> > > blocking port 4005.  You may need to configure that firewall to allow
> ssh
> > > to
> > > listen on localhost:4005 and/or to accept connections to it from
> Spacemacs.
> > > In theory you might have similar localhost firewall issues on hal9000,
> but
> > > that is less likely.
> > >
> > >
> > > >    2. Do I need bi-directional traffic on 22? (after recent changes I
> > > >    cannot ssh or scp into my Windows machine)
> > >
> > > I'm assuming that you ran the ssh command on the Windows 10 machine
> and it
> > > gave you a working login to hal9000.  If so, then it looks like you
> already
> > > have what you need for port 22.
> > >
> >
> > Yes, I can log in to hal9000 with the -L switch:
> >
> > > ssh -L4005:localhost:4005 mirko@hal9000
> > Last login: Thu Mar 19 14:33:17 2020 from 172.27.236.189
> > [mirko@hal9000 ~]$
> >
> >
> > >
> > > Note that bi-directional traffic on a connected socket is different
> from
> > > whether you can make a connection in both directions.
> > >
> > >
> > > >    3. What tools can I use to try to narrow down the cause of the
> > > problem?
> > > >    For instance, can I send a command to the lisp image, and see its
> > > effects
> > > >    on the lisp side?
> > >
> > > Firstly, run "netstat -antp" on hal9000 to see if Lisp is listening on
> port
> > > 4005.
> > >
> >
> > It looks that ccl-bin is listening:
> > $ sudo netstat -antp | grep :4005
> > tcp        0      0 127.0.0.1:4005          0.0.0.0:*
>  LISTEN
> >      104461/lx86cl64
> >
> >
> > >
> > > Secondly, run "netstat -anop tcp" on the Windows 10 machine to see if
> ssh
> > > is
> > > listening on port 4005.
> > >
> > >
> > I have Msys2's netstat. On the laptop:
> > > which netstat
> > /c/WINDOWS/system32/netstat
> > /c/Users/mirko/Downloads
> > > netstat -anop tcp | grep :4005
> >   TCP    127.0.0.1:4005         0.0.0.0:0              LISTENING
>  12052
>
> Yes, both netstat outputs look good at that point.
>
>
> > > Thirdly, run "ssh -p 4005 localhost" on the Windows 10 machine.  This
> use a
> > > ssh is very bogus, but it should at least give an error message with
> some
> > > diagnostics.  (Normally I would use telnet for this, but it is not
> > > installed
> > > on Windows 10 by default.)
> > >
> >
> > Outputs of both ssh and telnet on the laptop:
> > > which telnet
> > /usr/bin/telnet
> > /c/Users/mirko/Downloads
> > > telnet localhost 4005
> > Trying ::1...
> > Connected to localhost.
> > Escape character is '^]'.
> > Connection closed by foreign host.
>
> OK, so it is connected to the Windows side at least.
>
> Check that the Slynk server was created with :dont-close t (or set
> slynk:*dont-close* to t before creating it).  If dont-close is nil, it will
> only accept one connection, which makes debugging difficult.
>
> Then restart the log in to hal9000 with -v option to ssh to make it print
> debug
> information:
>
> ssh -v -L4005:localhost:4005 mirko@hal9000
>
> and try the telnet again to see what is happening at the Linux end.
>
> __Martin
>
Here is the test log. Telnet and ssh debug are at the bottom.
1 Start slynk with :dont-close t

Modified startup script:

(let ((port 4005))
    (slynk:create-server :port port :dont-close t)
    (format t "~% Created SLYNK server on port ~a" port))
(setf slynk:*use-dedicated-output-stream* nil)

2 Started tunnel with verbose option, -v switch

$ ssh -v -L4005:hal9000:4005 mirko@hal9000

3 Telnet on laptop side to laptop port 4005

@laptop> telnet localhost 4005
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

4 SSH debug output

@hal9000> debug1: Connection to port 4005 forwarding to hal9000 port
4005 requested.
debug1: channel 3: new [direct-tcpip]
channel 3: open failed: connect failed: Connection refused
debug1: channel 3: free: direct-tcpip: listening port 4005 for hal9000
port 4005, connect from ::1 port 64100 to ::1 port 4005, nchannels 4

 Thanks,

Mirko

--000000000000005af205a24e0559
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr">On Thu, Apr 2, 2020 at 7:55 AM Martin Sim=
mons &lt;<a href=3D"mailto:[email protected]">[email protected]</a>&g=
t; wrote:<br></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex">&gt;&gt;&gt;&gt;&gt; On Wed, 1 Apr 2020 08:59:30 -0400=
, Mirko Vukovic said:<br>
&gt; <br>
&gt; On Tue, Mar 31, 2020 at 11:51 AM Martin Simmons &lt;<a href=3D"mailto:=
[email protected]" target=3D"_blank">[email protected]</a>&gt;<br>
&gt; wrote:<br>
&gt; <br>
&gt; &gt; &gt;&gt;&gt;&gt;&gt; On Mon, 30 Mar 2020 21:16:00 -0400, Mirko Vu=
kovic said:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Hello,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; My setup is Sly on Spacemacs with Windows 10 running remote =
lisp on Linux<br>
&gt; &gt; &gt; over a corporate network. I have not found a Sly mailing lis=
t, and I<br>
&gt; &gt; hope I<br>
&gt; &gt; &gt; can get an answer here.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Emacs is running Sly on Spacemacs on Windows 10. Lisp is run=
ning on a<br>
&gt; &gt; Linux<br>
&gt; &gt; &gt; server. But Sly does not connect to the listening Lisp. Corp=
orate network<br>
&gt; &gt; &gt; security policies have changed. I can ask for IT to accommod=
ate me, but<br>
&gt; &gt; &gt; first I need to know what to ask for.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; So far, I have opened a tunnel, and started a listening lisp=
 (details<br>
&gt; &gt; &gt; below).<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; In Emacs I get:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; sly-connect RET RET RET<br>
&gt; &gt; &gt; [sly] Connecting to Slynk on port 4005..<br>
&gt; &gt; &gt; helm-M-x-execute-command: make client process failed: Connec=
tion timed<br>
&gt; &gt; out,<br>
&gt; &gt; &gt; :name, sly-9, :buffer, nil, :host, hal9000, :service, 4005, =
:nowait, nil,<br>
&gt; &gt; &gt; :tls-parameters, nil<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; The session transcript:<br>
&gt; &gt; &gt; &gt; ssh -L4005:localhost:4005 mirko@hal9000<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; [mirko@hal9000 .roswell]$ ros -L ccl-bin run --load<br>
&gt; &gt; start-slynk-server.lisp<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;=C2=A0 Added SLYNK path to ASDF:*CENTRAL-REGISTRY*<br>
&gt; &gt; &gt; SLYNK&#39;s ASDF loader finished.<br>
&gt; &gt; &gt;=C2=A0 Loaded ASDF system<br>
&gt; &gt; &gt; ;; Slynk started at port: 4005.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;=C2=A0 Created SLYNK server on port 4005<br>
&gt; &gt; &gt;=C2=A0 Set *USE-DEDICATED-OUTPUT-STREAM* to NIL<br>
&gt; &gt; &gt; Clozure Common Lisp Version 1.11.5/v1.11.5=C2=A0 (LinuxX8664=
)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; For more information about CCL, please see <a href=3D"http:/=
/ccl.clozure.com" rel=3D"noreferrer" target=3D"_blank">http://ccl.clozure.c=
om</a>.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; CCL is free software.=C2=A0 It is distributed under the term=
s of the Apache<br>
&gt; &gt; &gt; Licence, Version 2.0.<br>
&gt; &gt; &gt; ?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; My question is as follows:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;=C2=A0 =C2=A0 1. Do I need bi-directional traffic on 4005?<br=
>
&gt; &gt;<br>
&gt; &gt; Assuming you are using the ssh tunnel above, then you don&#39;t n=
eed port 4005<br>
&gt; &gt; traffic on the LAN (it is all hidden in the tunnel).<br>
&gt; &gt;<br>
&gt; &gt; The most likely problem is that some firewall on the Windows mach=
ine is<br>
&gt; &gt; blocking port 4005.=C2=A0 You may need to configure that firewall=
 to allow ssh<br>
&gt; &gt; to<br>
&gt; &gt; listen on localhost:4005 and/or to accept connections to it from =
Spacemacs.<br>
&gt; &gt; In theory you might have similar localhost firewall issues on hal=
9000, but<br>
&gt; &gt; that is less likely.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt;=C2=A0 =C2=A0 2. Do I need bi-directional traffic on 22? (aft=
er recent changes I<br>
&gt; &gt; &gt;=C2=A0 =C2=A0 cannot ssh or scp into my Windows machine)<br>
&gt; &gt;<br>
&gt; &gt; I&#39;m assuming that you ran the ssh command on the Windows 10 m=
achine and it<br>
&gt; &gt; gave you a working login to hal9000.=C2=A0 If so, then it looks l=
ike you already<br>
&gt; &gt; have what you need for port 22.<br>
&gt; &gt;<br>
&gt; <br>
&gt; Yes, I can log in to hal9000 with the -L switch:<br>
&gt; <br>
&gt; &gt; ssh -L4005:localhost:4005 mirko@hal9000<br>
&gt; Last login: Thu Mar 19 14:33:17 2020 from 172.27.236.189<br>
&gt; [mirko@hal9000 ~]$<br>
&gt; <br>
&gt; <br>
&gt; &gt;<br>
&gt; &gt; Note that bi-directional traffic on a connected socket is differe=
nt from<br>
&gt; &gt; whether you can make a connection in both directions.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt;=C2=A0 =C2=A0 3. What tools can I use to try to narrow down t=
he cause of the<br>
&gt; &gt; problem?<br>
&gt; &gt; &gt;=C2=A0 =C2=A0 For instance, can I send a command to the lisp =
image, and see its<br>
&gt; &gt; effects<br>
&gt; &gt; &gt;=C2=A0 =C2=A0 on the lisp side?<br>
&gt; &gt;<br>
&gt; &gt; Firstly, run &quot;netstat -antp&quot; on hal9000 to see if Lisp =
is listening on port<br>
&gt; &gt; 4005.<br>
&gt; &gt;<br>
&gt; <br>
&gt; It looks that ccl-bin is listening:<br>
&gt; $ sudo netstat -antp | grep :4005<br>
&gt; tcp=C2=A0 =C2=A0 =C2=A0 =C2=A0 0=C2=A0 =C2=A0 =C2=A0 0 <a href=3D"http=
://127.0.0.1:4005" rel=3D"noreferrer" target=3D"_blank">127.0.0.1:4005</a>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 0.0.0.0:*=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0LISTEN<br>
&gt;=C2=A0 =C2=A0 =C2=A0 104461/lx86cl64<br>
&gt; <br>
&gt; <br>
&gt; &gt;<br>
&gt; &gt; Secondly, run &quot;netstat -anop tcp&quot; on the Windows 10 mac=
hine to see if ssh<br>
&gt; &gt; is<br>
&gt; &gt; listening on port 4005.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; I have Msys2&#39;s netstat. On the laptop:<br>
&gt; &gt; which netstat<br>
&gt; /c/WINDOWS/system32/netstat<br>
&gt; /c/Users/mirko/Downloads<br>
&gt; &gt; netstat -anop tcp | grep :4005<br>
&gt;=C2=A0 =C2=A0TCP=C2=A0 =C2=A0 <a href=3D"http://127.0.0.1:4005" rel=3D"=
noreferrer" target=3D"_blank">127.0.0.1:4005</a>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0<a href=3D"http://0.0.0.0:0" rel=3D"noreferrer" target=3D"_blank">0.=
0.0.0:0</a>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 LISTENING=C2=A0=
 =C2=A0 =C2=A0 =C2=A012052<br>
<br>
Yes, both netstat outputs look good at that point.<br>
<br>
<br>
&gt; &gt; Thirdly, run &quot;ssh -p 4005 localhost&quot; on the Windows 10 =
machine.=C2=A0 This use a<br>
&gt; &gt; ssh is very bogus, but it should at least give an error message w=
ith some<br>
&gt; &gt; diagnostics.=C2=A0 (Normally I would use telnet for this, but it =
is not<br>
&gt; &gt; installed<br>
&gt; &gt; on Windows 10 by default.)<br>
&gt; &gt;<br>
&gt; <br>
&gt; Outputs of both ssh and telnet on the laptop:<br>
&gt; &gt; which telnet<br>
&gt; /usr/bin/telnet<br>
&gt; /c/Users/mirko/Downloads<br>
&gt; &gt; telnet localhost 4005<br>
&gt; Trying ::1...<br>
&gt; Connected to localhost.<br>
&gt; Escape character is &#39;^]&#39;.<br>
&gt; Connection closed by foreign host.<br>
<br>
OK, so it is connected to the Windows side at least.<br>
<br>
Check that the Slynk server was created with :dont-close t (or set<br>
slynk:*dont-close* to t before creating it).=C2=A0 If dont-close is nil, it=
 will<br>
only accept one connection, which makes debugging difficult.<br>
<br>
Then restart the log in to hal9000 with -v option to ssh to make it print d=
ebug<br>
information:<br>
<br>
ssh -v -L4005:localhost:4005 mirko@hal9000<br>
<br>
and try the telnet again to see what is happening at the Linux end.<br>
<br>
__Martin<br></blockquote><div>Here is the test log. Telnet and ssh debug ar=
e at the bottom.</div><div id=3D"gmail-content" style=3D"color:rgb(0,0,0);f=
ont-family:&quot;Times New Roman&quot;;font-size:medium"><div id=3D"gmail-o=
utline-container-orgb982551" class=3D"gmail-outline-2"><h2 id=3D"gmail-orgb=
982551"><span class=3D"gmail-section-number-2">1</span>=C2=A0Start slynk wi=
th=C2=A0<code>:dont-close t</code></h2><div class=3D"gmail-outline-text-2" =
id=3D"gmail-text-1"><p>Modified startup script:</p><pre class=3D"example" s=
tyle=3D"border:1px solid rgb(204,204,204);padding:8pt;overflow:auto;margin:=
1.2em">(let ((port 4005))
    (slynk:create-server :port port :dont-close t)
    (format t &quot;~% Created SLYNK server on port ~a&quot; port))
(setf slynk:*use-dedicated-output-stream* nil)
</pre></div></div><div id=3D"gmail-outline-container-orgaa6b68a" class=3D"g=
mail-outline-2"><h2 id=3D"gmail-orgaa6b68a"><span class=3D"gmail-section-nu=
mber-2">2</span>=C2=A0Started tunnel with verbose option,=C2=A0<code>-v</co=
de>=C2=A0switch</h2><div class=3D"gmail-outline-text-2" id=3D"gmail-text-2"=
><pre class=3D"example" style=3D"border:1px solid rgb(204,204,204);padding:=
8pt;overflow:auto;margin:1.2em">$ ssh -v -L4005:hal9000:4005 mirko@hal9000
</pre></div></div><div id=3D"gmail-outline-container-org694162e" class=3D"g=
mail-outline-2"><h2 id=3D"gmail-org694162e"><span class=3D"gmail-section-nu=
mber-2">3</span>=C2=A0Telnet on laptop side to laptop port 4005</h2><div cl=
ass=3D"gmail-outline-text-2" id=3D"gmail-text-3"><pre class=3D"example" sty=
le=3D"border:1px solid rgb(204,204,204);padding:8pt;overflow:auto;margin:1.=
2em">@laptop&gt; telnet localhost 4005
Trying ::1...
Connected to localhost.
Escape character is &#39;^]&#39;.
Connection closed by foreign host.
</pre></div></div><div id=3D"gmail-outline-container-orgd97c209" class=3D"g=
mail-outline-2"><h2 id=3D"gmail-orgd97c209"><span class=3D"gmail-section-nu=
mber-2">4</span>=C2=A0SSH debug output</h2><div class=3D"gmail-outline-text=
-2" id=3D"gmail-text-4"><pre class=3D"example" style=3D"border:1px solid rg=
b(204,204,204);padding:8pt;overflow:auto;margin:1.2em">@hal9000&gt; debug1:=
 Connection to port 4005 forwarding to hal9000 port 4005 requested.
debug1: channel 3: new [direct-tcpip]
channel 3: open failed: connect failed: Connection refused
debug1: channel 3: free: direct-tcpip: listening port 4005 for hal9000 port=
 4005, connect from ::1 port 64100 to ::1 port 4005, nchannels 4=C2=A0</pre=
></div></div></div><div>=C2=A0Thanks,</div><div><br></div><div>Mirko</div><=
/div></div>

--000000000000005af205a24e0559--