<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michael Placzek</title>
    <description>The latest articles on DEV Community by Michael Placzek (@heymaikol).</description>
    <link>https://dev.to/heymaikol</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4099690%2F3213ac26-f0bf-41d0-89b2-b85c85bca0ee.jpg</url>
      <title>DEV Community: Michael Placzek</title>
      <link>https://dev.to/heymaikol</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heymaikol"/>
    <language>en</language>
    <item>
      <title>Debugging a Network Problem From Another Machine</title>
      <dc:creator>Michael Placzek</dc:creator>
      <pubDate>Sat, 29 Aug 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/heymaikol/debugging-a-network-problem-from-another-machine-1fam</link>
      <guid>https://dev.to/heymaikol/debugging-a-network-problem-from-another-machine-1fam</guid>
      <description>&lt;p&gt;One of the most useful questions in network troubleshooting is also one of the simplest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it fail from another machine too?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a website will not load on my laptop, trying it from another computer can immediately change the investigation.&lt;/p&gt;

&lt;p&gt;If it works there, the service probably is not down. Something about my machine, DNS configuration, VPN, firewall, route, or network path is different.&lt;/p&gt;

&lt;p&gt;If it fails there too, the problem may be farther upstream.&lt;/p&gt;

&lt;p&gt;I wanted Network Doctor to be able to ask that question directly.&lt;/p&gt;

&lt;p&gt;So I added remote diagnosis over SSH.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netdoc &lt;span class="nt"&gt;--via&lt;/span&gt; ideapad github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of running the diagnosis locally, Network Doctor connects to &lt;code&gt;ideapad&lt;/code&gt;, runs the checks there, and reports the result back on my machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why another vantage point matters
&lt;/h2&gt;

&lt;p&gt;A network failure is always observed from somewhere.&lt;/p&gt;

&lt;p&gt;Suppose &lt;code&gt;github.com&lt;/code&gt; is unreachable from my workstation.&lt;/p&gt;

&lt;p&gt;I can test DNS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then TCP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-vz&lt;/span&gt; github.com 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then TLS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl s_client &lt;span class="nt"&gt;-connect&lt;/span&gt; github.com:443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maybe I inspect my routes, VPN, proxy settings, or firewall.&lt;/p&gt;

&lt;p&gt;Those tests are useful, but they all share one property: they are observing the network from the same machine.&lt;/p&gt;

&lt;p&gt;Trying the same destination from another machine gives me a new piece of evidence.&lt;/p&gt;

&lt;p&gt;Imagine this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thelio:
DNS       PASS
TCP 443   FAIL

Ideapad:
DNS       PASS
TCP 443   PASS
TLS       PASS
HTTPS     PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That difference is interesting.&lt;/p&gt;

&lt;p&gt;GitHub clearly is not universally unreachable. The second machine just reached it.&lt;/p&gt;

&lt;p&gt;Now I have a much smaller problem to investigate: what is different about the path from Thelio?&lt;/p&gt;

&lt;p&gt;That is often more useful than running another five commands on Thelio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning that into a command
&lt;/h2&gt;

&lt;p&gt;Network Doctor already runs network checks as a dependency graph.&lt;/p&gt;

&lt;p&gt;For an HTTPS target, for example, it can test things such as the local interface, DNS resolution, TCP connectivity, TLS, HTTP, routing, and path MTU.&lt;/p&gt;

&lt;p&gt;Normally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netdoc github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Diagnose github.com from this machine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With &lt;code&gt;--via&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netdoc &lt;span class="nt"&gt;--via&lt;/span&gt; ideapad github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;it becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Diagnose github.com from ideapad.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The SSH machine is the vantage point. My local machine is just controlling the run and displaying the result.&lt;/p&gt;

&lt;p&gt;That distinction becomes especially useful with service profiles.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netdoc &lt;span class="nt"&gt;--via&lt;/span&gt; ideapad &lt;span class="nt"&gt;--profile&lt;/span&gt; github
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The GitHub profile independently checks GitHub's website, API, normal SSH endpoint, and alternate SSH endpoint.&lt;/p&gt;

&lt;p&gt;So I can ask a more useful question than simply "can the other computer ping GitHub?"&lt;/p&gt;

&lt;p&gt;I can ask whether the actual service paths I care about work from there.&lt;/p&gt;

&lt;h2&gt;
  
  
  It also works across operating systems
&lt;/h2&gt;

&lt;p&gt;One of my tests involved a Linux workstation controlling a Windows machine over SSH.&lt;/p&gt;

&lt;p&gt;The command was still just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netdoc &lt;span class="nt"&gt;--via&lt;/span&gt; ideapad &lt;span class="nt"&gt;--profile&lt;/span&gt; github
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The remote worker ran on Windows, while I launched and viewed the diagnosis from Linux.&lt;/p&gt;

&lt;p&gt;I like this because the two machines do not need to be identical.&lt;/p&gt;

&lt;p&gt;In fact, sometimes it is more interesting when they are not.&lt;/p&gt;

&lt;p&gt;A Windows laptop and a Linux workstation might have different DNS configuration, routes, VPN software, firewall rules, interfaces, or network locations.&lt;/p&gt;

&lt;p&gt;Those differences are exactly what can make a second vantage point useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is not just "run the command over SSH"
&lt;/h2&gt;

&lt;p&gt;I could obviously do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh ideapad netdoc github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And sometimes that is perfectly sufficient.&lt;/p&gt;

&lt;p&gt;The reason I wanted remote execution inside Network Doctor is that the location of the probe becomes part of the diagnostic model.&lt;/p&gt;

&lt;p&gt;That means the same mechanism can be used with profiles and structured output instead of treating the remote command as an unrelated terminal session.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netdoc &lt;span class="nt"&gt;--via&lt;/span&gt; ideapad &lt;span class="nt"&gt;--profile&lt;/span&gt; github
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;still means "run the GitHub diagnostic profile," while &lt;code&gt;ideapad&lt;/code&gt; answers the separate question of where those probes should originate.&lt;/p&gt;

&lt;p&gt;I think that separation is useful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What should I test?     --profile github
Where should I test it? --via ideapad
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What this can tell you
&lt;/h2&gt;

&lt;p&gt;A second vantage point does not magically identify every network problem.&lt;/p&gt;

&lt;p&gt;But it can eliminate a lot of possibilities quickly.&lt;/p&gt;

&lt;p&gt;If the same destination fails from both machines in the same way, that is evidence that the issue may not be specific to one host.&lt;/p&gt;

&lt;p&gt;If it fails from one machine but works from another, host-specific or path-specific explanations become much more interesting.&lt;/p&gt;

&lt;p&gt;If DNS answers differ, investigate DNS.&lt;/p&gt;

&lt;p&gt;If DNS agrees but TCP connectivity differs, look farther down the path.&lt;/p&gt;

&lt;p&gt;If TCP succeeds from both but TLS fails from only one, that is another useful distinction.&lt;/p&gt;

&lt;p&gt;The important part is not simply having more probes.&lt;/p&gt;

&lt;p&gt;It is having &lt;strong&gt;different observations that can disagree&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Disagreement is often where the useful information is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The larger idea
&lt;/h2&gt;

&lt;p&gt;Network troubleshooting tools usually become collections of tests:&lt;/p&gt;

&lt;p&gt;ping something.&lt;/p&gt;

&lt;p&gt;Resolve something.&lt;/p&gt;

&lt;p&gt;Open a socket.&lt;/p&gt;

&lt;p&gt;Inspect a route.&lt;/p&gt;

&lt;p&gt;Check a certificate.&lt;/p&gt;

&lt;p&gt;Those are necessary, but I am increasingly interested in the reasoning that connects the observations.&lt;/p&gt;

&lt;p&gt;A diagnostic tool should help answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does this result rule out?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remote diagnosis adds another way to obtain that evidence.&lt;/p&gt;

&lt;p&gt;Instead of endlessly probing the same broken machine, sometimes the best next probe is the same test from somewhere else.&lt;/p&gt;

&lt;p&gt;That is now one command in Network Doctor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netdoc &lt;span class="nt"&gt;--via&lt;/span&gt; another-machine target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Network Doctor is open source, and I would especially like to hear about cases where comparing two machines gives a misleading result or where the remote diagnosis reaches the wrong conclusion.&lt;/p&gt;

&lt;p&gt;Those are the interesting bugs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/heymaikol/network-doctor" rel="noopener noreferrer"&gt;https://github.com/heymaikol/network-doctor&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>go</category>
      <category>networking</category>
    </item>
  </channel>
</rss>
